Sparkle (itch) (creat-if) Mac OS
What is Sparkle for Mac Sparkle is a module that developers can stick in their Cocoa applications (five-step install!) to get instant self-update functionality. Sparkle is open source software available under the permissive MIT license, and is developed on GitHub by the Sparkle Project with the help of dozens of valued contributors. Modern Sparkle is kept up to date with the latest Apple technologies such as Touch Bar and Dark Mode. Learn how to do anything with wikiHow, the world's most popular how-to website. Easy, well-researched, and trustworthy instructions for everything you want to know. In this lesson from our full tutorial on how to use Sparkler Visual Web Design. Learn how to build a contact for so visitors to your website can send you que. This is our first project:). Try to kill as many enemys as possible. You'll need to switch elements to deal more damage. Can you get a score higher than 9000?
You must be 18+ to view this content
Succubus Crest may contain content you must be 18+ to view.
Are you 18 years of age or older?
A downloadable game for Windows and macOS
Story
The adventure begins shortly after a powerful Succubus has been sealed away. You, the main hero have come with an agreement with a beautiful succubus, to work under her in order to restore her power with a great reward, whatever you heart desires.
Shortly after, an acquaintance you make in the wilds gives you a way to start restoring her power, by placing a Magical Crest on both of you.
You now have to wander around the world in order to mate with girls and increase your ally's powers as her enemies prepare for their evil plot.
Depending the path you choose to follow the story and the NPC's will change their behavior towards that.
So..
Are you a Charmer or a Stud?
Information Regarding game
Succubus Crest is a RPG adventure-puzzle type of game. You have to solve riddles, increase the relationship with other characters in the game and explore the vast world of Evather!
How to Support
The continuation of this project is made possible thanks to the help and support of Patreon and itch.io. If you are interested in helping fund the continued development of Succubus Crest, or would just like to see more 'premium' features, visit here:
Patreon
You can also support the project here on itch.io Succubus Crest is still in early development but it is free to play. When you download it you have the choice to donate a minimum amount or not this is not necessary, you can also support by advertising the game! If you have played and want to see more please consider supporting.
= Artist =
= Fetishes =
- Foot fetish
-Footjob
-Blowjob
-Vanilla sex
-Femdom
-Oral
-Gangbang / Orgy
-Fingering
-Titjob
-NTR
-Avoidable NTR / Netori
-Foot worship
-Anal
-And more more more to be added!
Status | In development |
Platforms | Windows, macOS |
Rating | |
Author | Dokan |
Genre | Adventure, Role Playing |
Tags | Adult, Eroge, Exploration, footjob, Hentai, RPG Maker, Story Rich, succubuscrest |
Download
Click download now to get access to the following files:
Development log
- Succubus Crest v0.0.25b is out.35 days ago
- Succubus Crest v0.0.25a is out!51 days ago
- Devlog 03-Mar-2021 - Early release is right around the corner!!!59 days ago
- Devlog 17-Feb - 21 - Scene poll results!73 days ago
Log in with itch.io to leave a comment.
i must say i love this game you work very well i enjoy this and im so glad you create this story <3
Thank you so much for your kind words. I'm working on next part currently, let's hope it comes out the soonest possible. Make sure you hang around our Discord server / Twitter or Patreon if you wish to support for news-updates.
i want help i can't do nothing now after i set gem and i have caravan master on 75 % and lili now go to find us becour rita told her just i can't continue now and i dont know what i can do xD now i had 0 main and 0 side quest
If you have visited hero's house, then that's where this version ends for now.
Hello nfGRIM1, I deleted your comment because of the way you wrote it. If you wish to re-phrase it in a way that is not offensive for no reason, then of course I will allow it on the game's page whether it is negative or not.
Regarding the scenes, yes it is something we are aware of. Just understand that poll results are decided by Patreons, who are making this game possible through their support. It is in my plans to add more varieties including vanilla scenes that you mentioned, just keep in mind that a scene takes 10-15 days to make in the minimum, not to mention the high costs of it.
If you wish in any way to support the game and suggest the scenes you would like to see, you're more than free to do so through the Patreon.
If you believe my game is worth 1*, then you're more than free to rate it as such. But you don't have to go through the effort of making 10 accounts just to leave that many negative ratings, as far as I know a person is allowed of one rating on this website.
Best regards,
Dokan
And you letting patreons write a single fetish into being the only fetish in the game is only going to hurt you. Isn't that ironic? Why would the vast majority of people who dont like feet support a game that is atm 90% feet? You have already let your polls drag yourself into a hole.
Suggestion, once a niche fetish wins keep it out of the next few polls so you can have variety and a actual dom path.
I'm not into feet at all and i really enjoy this game. I think there are 4 scenes out of 15. You should probably check your math there. Just because the fans enjoy feet doesn't mean its only feet. Also all the feet scenes are optional. If you don't like it, skip it.
Okay, I've been looking for about an hour for the Mandragora root. I've been looking around the mountain area from 23pm - 1am. Still haven't found it. Anybody know where and when I can find this?
Ya I came across that problem, might be an idea to make it more visible, have a sparkle or when you get close have the PC mention its around here.
I ended up cheating and adding it to my inventory as I couldn't see it.
Hello loren44, I think this is a windows file you're missing and not game-related it seems.
Im actually hoping this game grows! Could use a little futa doe. Great game. Peace!
-That one game reviewer
If you enjoyed it, consider supporting it. We host polls on Patreon with votes like that for the players to get what they would like to see next :)
You took the horse out of the caves in v0.0.1c. I hope its ok
The horse is ok, it should still be in the version just appearing on different days, I wonder if anyone has witnessed the full easter egg
There is more to the horse? Looks like I need another play through, lol
I checked both the mountains & the hills in the forest area at midnight & I can't seem to find the mandragora root.
It is only out for an hour, so if you take too long it goes away
You need to search really well, did you talk to the bartender for one of his money choices?
Well I found the town one, but I haven't payed for the 25 coin from his money choices, will that help?
Oh wait I got it you just have to be go through everything.
This game seems interesting and I would love to see more of this! Say I don't know if you are taking suggestions or not but maybe you can put something like a Indiana Jones and the Last Crusade type puzzle but different. Idk just a thought
I would love to see what you have in mind, can you link?
Ah! that's a classic, yes I have puzzles like this in mind. Thank you for your suggestion. :) Don't forget to enter the twitter giveaway contest
hi i downloaded the game and the following image appeared on my computer reporting an error and i don't know what i might be doing, is there any solution?
Hello, when did this occur? Can you give me a bit more information?
I see, appearing right off the bat makes me believe it's something different.
What OS are you using? Have you downloaded some RPG Maker resources to run that other game? If so they might be conflicting with this game.
I think your best bet is to try on a different machine or a different OS, can you please try running it on a different computer (With the same file of course) and let me know what happens?
hey man i'm unable to save my game, whenever i go to save and select a save file and click on save, the game doesn't save and just sends me back to file selection
Hello CreampieMaster609,
Please create a folder with the .exe file named 'www' and inside this folder place a folder called 'save'.
Let me know if this solution fixes your issue.
Release Date
November 9th, 2015
Requirements
Curio 10 runs on macOS Yosemite (10.10) or El Capitan (10.11).
Important Notice To Upgraders
- Curio 10 runs on macOS Yosemite (10.10) or El Capitan (10.11)! It does not run on earlier releases of OS X.
- Curio is now using Apple's modern AVKit framework for audio and video playback on idea spaces instead of the deprecated, QuickTime-based QTKit. AVKit supports most modern media types but may not support older formats supported by QuickTime or installed QuickTime extensions. Those older media items will no longer play within the Curio environment so you will have to right-click and launch them with the Finder to play them, instead. Alternatively, you can use the OS X tool qtmodernizer to convert your legacy media files to a modern, supported format and then add those converted files into your Curio projects.
- Curio no longer supports exporting to Apple's discontinued iPhoto app.
- Curio no longer supports the long-discontinued Apple remote controls.
- Curio no longer supports a Scrapbook: instead that functionality is handled by the new Local library shelf and the Curiota companion app, as detailed below. Your old Scrapbook will be converted into a Curiota Scrapbook collection.
Features
The release is packed with incredible new functionality and oodles of tweaks and enhancements!
Curiota
Curiota is a fantastic new — free — companion product that integrates with and extends Curio's functionality and connectivity.
It is available as a separate download exclusively from the Apple Mac App Store.
Curiota in a Nutshell
Curiota runs all the time, stays out of the way, and provides numerous ways for you to collect notes, files, and research, including several script-based methods for power-users.
Once Curiota is installed, Curio will instantly recognize it and provide access to its collections using the new Local Library shelf, which is detailed below.
For this first release of Curiota the primary goal is to be a flexible and lightweight conduit for getting data into Curio. Curiota also takes over many services that used to be managed by Curio itself including the Scrapbook and Scrapbook-related features. In fact, your old Curio Scrapbook will be converted to a Curiota 'Scrapbook' collection.
The Big Features
- Lightweight and Always Available
- Instant Rich Note Submission (the window is resizable and always on top)
- Add Files, Images, and Text via Drag-and-Drop to the Curiota Menu Bar Icon
- OS X Services Support
- OS X Share Button Support
- Save PDF to Curiota
- Bookmarklet
- AppleScript/JavaScript Support
- Integrates with Curio via the new Local Library Shelf
- Support for Synced Data Storage
- Open Data Formats + Open Directory Structure + No Database = No Vendor Lock-in (it's your data)
- Available from the Mac App Store as a Separate Download
Separate Download
Why a separate download? Because we want to be able to add features quickly and more rapidly than if it were embedded within Curio itself. With the Mac App Store process handling all updates, Curiota can be neatly updated behind the scenes, automatically, as we add new features.
And more features will be appearing soon! Stay tuned!
Curiota Documentation
Curiota has oodles of useful features, so please read all the details to get a complete overview.
Stacks
Curio proudly introduces Stacks, a new integrated collection perfect for visual task tracking!
As you might guess, a stack collection will arrange contained items... in a stack. The widths of all contained figures will be increased to the width of the stack, appropriately sizing images proportionally. If you resize the stack, the widths of all figures within will resize as well.
Stacks are best suited for organizing text, image, and file asset figures.
Think of stacks as a personal Trello or similar stack-based task tracking app or service.
Working with Stacks
Creating a Stack
Create a stack using the Insert toolbar button to see the new stack gallery. As a note, you can press I
to bring up the Insert popover then press K
to instantly select the Stack option.
You can also use the Insert > Stack menu item.
Adding Items
To insert your first item just double-click within the stack. If an item is selected or is being edited then press ⌘-Return (Command-Return) or ⇧⌘-Return (Shift-Command-Return) to insert a previous or next sibling.
You can also drag in figures from other collections or from the idea space itself, or drag in items from outside of Curio such as from the Finder or Safari.
Collect into Stack
You can select multiple figures on your idea space and choose Arrange > Collect Into > Stack to move them all into a new stack collection.
Exporting
Select a stack and export it via the Share toolbar button as text, OPML, or a mind map format.
Expand/Collapse Support
You can collapse and expand titled stacks by selecting the stack figure and tapping the Spacebar. As a note, when expanding after a collapse the stack is sized to its minimum size necessary to enclose its contained figures so this is also a handy way to 'shrink to minimum'.
Stack Sorting
By default, you can manually rearrange items in the stack. Just drag items up and down the stack to arrange them in any order you wish.
However, you can also tell Curio to keep the stack automatically sorted by title, creation date, modification date, due date, start date, start date or end date if already started, percent completed, priority, or rating. You can specify a secondary sort as well. Make a change to a figure and instantly the figures rearrange based on the sorting rule.
Smart Tag Inheritance
Stacks have two special, very important characteristics:
- Curio will ignore stack titles in the Status shelf (when grouping by tag) or on the Search shelf (when searching for tags).
- Items within the stacks will automatically inherit the title's tags.
Huh?
This means you can construct a series of stacks, where the title of the stack has an associated tag (like those below), and simply drag-and-drop items from one stack to another. Those items will instantly inherit the title's tag and appear in the Status shelf with the correct associations.
So, if you want to promote a task from Ideas to Pending then just drag it from one stack to the other and, internally, Curio will handle changing the tag associations automatically, instantly updating the Status shelf.
Some notes on the example workflow above...
- The Ideas stack is auto-sorted by rating and the Next is sorted by priority. The actual workflow is larger than pictured above with Active, In Flight, and Done stacks as well, each sorted using different techniques. For example, once a task is in Active I assign a start date and duration so I sort that stack by Start Date.
- I used a salmon-colored figure style for personal tasks and the gray-color style for work tasks just as an experiment mixing different types of tasks on the same stack workflow.
- A stack stack accepts the normal methods for inserting a new item such as double-clicking within the stack to create a simple text figure or using the Insert toolbar button to insert a new figure of a certain style.
- That said, I personally used the Edit > Duplicate (⌘D) feature quite a bit to create new figures using the same style as another one. Of course the stack will automatically grow as needed to hold new items.
- You can also Option-drag (or Copy/Paste) a figure from one stack to another to quickly create a duplicate.
- The Format > Copy Style (⌥⌘C) and Format > Paste Style (⌥⌘V) commands are a quick way to style a figure based on another figure.
- Creating that stack workflow above was easy to do with the handy Arrange > Align > Top and Arrange > Distribute > Horizontally menu items. Sticky lines going between the stacks automatically line themselves up as the stacks grow or shrink.
- The titles for those stacks use the extremely cool new FigureTagName directive, which you can learn more about below.
- One of the stacks above has been added as a new bundled stack stencil. Simply insert it using the gallery then apply a style or style it manually.
Stack Toolbar Icon
If you find yourself using stack collections frequently, note that you can customize the toolbar and add a dedicated Stack button so you can quickly bring up the Stack gallery. Or hold the Shift key when clicking the button to instantly create a brand new stack collection on the current idea space with the default style.
Mind Map & List Sorting
Both mind map and list collections can now have sorted branches!
How to Sort
Select a parent node in either a list or mind map then check out the collection's Children inspector panel. Choose a primary sort: by title, creation date, modification date, due date, start date, start date or end date if already started, percent completed, priority, or rating. You can optionally specify a secondary sort criteria, as well.
Instantly the children of the selected node will be sorted. Even better, as you change the figures, the nodes will be dynamically re-sorted is necessary.
If you check the 'recursively' checkbox then children of the children will sort themselves with the same sort criteria.
Date Calculations: Safety First!
Note, however, if any child figure uses a Start Date calculation based on a sibling then sorting will not occur with those children. Why? If, based on sorting rules, figures jumped around based on title or priority, then at could have an unintended consequence on all your figure dates! Basically, we're assuming you placed those figures in specific precedence ordering — buy groceries then make dinner — and we don't want an automatic sorting to spontaneously ruin that ordering.
Drag-and-Drop
Of course if you drag-and-drop or add new items to a sorted collection then the nodes will be automatically repositioned as necessary to maintain the sort order.
iMindMap Import/Export Support
Curio 10 can now import and export mind map files generated with the extremely popular iMindMap app for OS X and iOS.
Import
Curio's iMindMap import support is a great way to start a mind map on your iPad and then continue work in Curio when you get back to your Mac. The import will bring in node title, start/due date, percent complete, and priority information. Just drag-and-drop the iMindMap file directly into your idea space and it'll be turned into a native Curio mind map.
Export
To export a Curio mind map in iMindMap format, select the mind map within Curio and use the Share toolbar button. Currently Curio can export the title, start/due date, and a handful of flags. (To be honest, we're also exporting percent complete and priority but, for some reason, iMindMap is ignoring it.) After opening an exported mind map from Curio in iMindMap, you may need to force a re-layout by clicking the Clean Up toolbar button just to make sure everything is positioned properly.
Special Notes
Note that formatting and layout information such as fonts, shapes, coloring, and positions are not imported or exported. Instead, after import, the default Curio mind map style is applied and the mind map is automatically laid out. Also currently Curio doesn’t import or export images or other asset files (aka attachments).
MindNode Import/Export Enhancements
Zipped File Handling
MindNode is another extremely popular format which Curio has supported since Curio 9. We've added additional support for this format in Curio 10, as follows.
MindNode files can either be an OS X package file (which is technically a folder hierarchy but appears to the user as a normal file) or, with more recent releases of MindNode, a zipped file (which internally contains the folder hierarchy). In both cases the file extension is .mindnode
.
Curio 10 adds support for the newer zipped file format to its existing support for the package format, when importing a MindNode file via drag-and-drop to an idea space, When exporting a mind map as a MindNode file, Curio will default to a zipped file format although you can override this with the MindNode Exports As Packageadvanced setting.
MindNode 2 Format
Curio also supports the slightly-altered format introduced in MindNode 2. Formerly a node title was either plain text or RTF-formatted text. With MindNode 2 it could now be HTML-formatted text, as well, so Curio supports all three possible text formats.
OPML Import Robustness
The OPML format, for hierarchical data such as lists and mind maps, contains a header title element then a nested series of outline elements. Generally for a list or mind map the title of the list or central topic of the mind map becomes the title element and the nested outline elements are all of its children.
However, some apps (such as MindNode) may export an OPML file with both a title element and an identical top-level outline element. The result, after importing into Curio, would be a mind map with a central topic that has a single child identical to the central topic, and then, under that child, the rest of the tree.
Curio will now detect this situation during import and adjust the resulting tree structure as necessary so you don't see this oddity.
List Enhancements
Line Spacing
You can now adjust the spacing between sibling items in a list via the List inspector.
Even Cleaner Bullet Lists
Remember how Curio 9 took care of the dreaded 'double-bullet' issue:
Curio 8 Bulleted Lists | Curio 9 Bulleted Lists |
Much cleaner, right?
Well, now Curio 10 makes it look even better by taking care of the dreaded 'disclosure+bullet' issue:
Curio 9 Bulleted Lists | Curio 10 Bulleted Lists |
Note this only affects bulleted lists, not enumerated or custom prefixed lists.
Other Mind Map & List Enhancements
New Children Auto Inherit This Figure's Colors Checkbox
Previously Curio's list and mind map inspectors had a button which said Children Auto Inherit This Figure's Colors. Pushing it would immediately set all the children so their This figure inherits colors from its parent checkbox was set and make it so any new children you created would also automatically have that checkbox set.
This was very handy... until you wanted to turn it off.
You could uncheck the individual children checkboxes but, still, any new children you created would immediately get that checkbox set.
So, in Curio 10, we've changed this so turning on this parent functionality is now a checkbox instead of a button. Unchecking it will immediately uncheck all children inherit checkboxes as well as clear the the internal flag that was causing new items to inherit by default.
Context Menu Additions
You can now right-click on a node in the mind map or list and choose Copy Style to Siblings or Copy Style to Level to quickly copy a figure's style to its immediate siblings or to all the figures at this hierarchical level (i.e. the figure's siblings and cousins).
It also supports a new checkbox toggle for children auto inherit colors from parent.
Level, not Cousins
As a note, previously Curio referred to immediate siblings as siblings, but figures at the same hierarchical level but with different parents as siblings & cousins. This was technically correct but cousins is a bit confusing to comprehend, so now Curio just calls all of those items as items on the same level. Hopefully that's a bit more clear.
Table Enhancements
Fit and Distribute Rows and Columns
Fit
Curio can now resize one or more row heights so they fit the contents of the tallest cell. Likewise, Curio can now resize one or more column widths so they fit the contents of the widest cell.
Begin by selecting either the table itself, if you want to fit all rows or columns, or select specific cells within the table, to fit specific rows or columns. Then press the appropriate Fit button in the Table inspector.
Distribute
Similarly, Curio can now evenly distribute the heights or widths of the selected rows or columns (or all rows or columns) so they each have the same value.
Begin by selecting either the table itself, if you want to distribute all rows or columns, or select specific cells within the table, to distribute specific rows or columns. Then press the appropriate Distribute button in the Table inspector.
Resizing Tweak
In the past when you resized a table's row or columns, that row or column changed its size but the overall table size stayed the same. Curio did it like this because Keynote tables worked the same way.
Now, however, Apple has changed resizing in the latest Keynote so it will resize the table while you are resizing the row or column. This does seem much more friendly so Curio now works this way as well.
But we still wanted to give customers a way to resize just the row or column, while keeping the overall table size the same. So, if you hold the ⌥ (Option) key down while resizing we'll keep the table size as-is, which comes in handy from time-to-time.
Here's a movie which demonstrates the new functionality:
Figure Tweaks & Fixes
The cylinder shape now has a nice, curved bottom instead a flat bottom:
- Fixed issues with the super/subscript buttons on the inspector bar not working correctly.
- The time-based figure variables now update more reliably as the idea space is changed.
- Fixed issue where the glow around a figure was sometimes clipped.
- Fixed odd drop placement offsets when drag-and-dropping figures from collections to the idea space.
- New support for the Shadow Coloradvanced setting for those that want to override the default.
Export Tweaks & Fixes
- HTML Export now exports correct image map coordinates when the Export entire idea space (don't clip unused) checkbox is checked.
Mail Enhancements
Smarter Parsing of Mail Message Headers
When you drag a message from Mail into Curio we embed the message into your Curio project. The newly created figure for that message displays the subject, from, and date fields. Curio parses the raw message for this information and now properly decodes quoted-printable and base-64 encoded subject and from fields and converts the internal date into a displayable format. The result is much better handling of messages particularly those containing international characters.
Postbox Integration
Curio's Postbox integration AppleScript has been updated to fix some compatibility issues.
Technical Improvements
Built For OS X Yosemite and OS X El Capitan
The Curio codebase has been updated to work with OS X Yosemite (10.10) and OS X El Capitan (10.11).
- Curio 10 is built with the latest Xcode 6 release.
- Curio 10 also compiles as cleanly as possible with the just-released Xcode 7 with a few notes:
- Apple has removed the 10.10 SDK and we're not ready to rewrite some items (specifically a few cases where we're still using cell-based table/outline views) to build against the 10.11 SDK.
- We did build and test with Xcode 7's fantastic new Address Sanitizer feature to try to find any memory bugs in Curio. Fortunately, it's looking quite clean with no errors found!
- For safety's sake we're sticking with Xcode 6 until Xcode 7 is a bit more mature and any bugs or other issues in the compiler are taken care of by Apple.
- With a deployment target of 10.10 or above we removed or modified many calls which are now deprecated by Apple, thus ensuring our codebase is clean and as up-to-date as possible. This is actually quite significant because a couple of large, internal frameworks were inadvertently shielding themselves from deprecated warnings so the result was hundreds of warnings we had to resolve with more modern methods. For example, Curio is now completely weened off the libcrypto and libssl (OpenSSL) libraries, in favor of the newer CommonCrypto.
- For you Xcoders out there, historically we have generally compiled with -Wall which catches the most grievous warnings. However, we're now using -Weverything which enables every warning supported by the Clang compiler, which resulted in hundreds of new warnings that we tackled. Yes, many were rather pedantic, but the majority were definitely worth addressing.
- That said, there were some -Weverything warnings we had to disable for now: -Wno-objc-interface-ivars -Wno-direct-ivar-access -Wno-objc-missing-property-synthesis -Wno-format-nonliteral -Wno-gnu-statement-expression -Wno-float-equal -Wno-assign-enum -Wno-switch-enum -Wno-nullable-to-nonnull-conversion -Wcast-qual. We'll re-enable those warnings as we continue to fine-tune and refactor our codebase.
- We added the Xcode warning Overriding Deprecated Objective-C Methods, which apparently is a special case not included with -Weverything, so we find out if we're overriding (not simply using) a deprecated method. Finding out if we're overriding a deprecated method, perhaps for a custom user interface element, is important because that means Apple will stop calling that method at some point in the future and our override would be bypassed.
- Curio is no longer using the deprecated CalendarStore framework, for syncing events and tasks to the Calendars and Reminders apps. Instead we're using the EventKit framework which is code-shared with iOS. This was a major coding task but we're happy to be on the new framework. More details in the Calendar & Reminder Syncing Enhancements section above.
- Curio is no longer using the deprecated, QuickTime-based QTKit framework for media playback. Instead we're using the AVKit framework which is code-shared with iOS. While AVKit supports most modern media types it may not support older formats supported by QuickTime or installed QuickTime extensions, so those must be launched via the Finder for playback. More details in the Movie Figure Enhancements section above.
- Lastly, we also performed an in-depth Xcode Static Analysis on our code to find any potential memory leaks, uninitialized variables, dereferenced null pointers, or other problems and addressed all of the found issues.
Updated 3rd Party Frameworks
Curio 10 includes the latest releases of several embedded 3rd party frameworks.
- Now using Sparkle 1.12, which manages Curio's ability to check for and safely and securely install application updates. There are tons of fixes and improvements since the old 1.6 version we had been using.
- Now using PXSourceList 2.0.5, which manages the Organizer's outline view. This is a major rewrite of the old 1.x version we had been using with lots of features and fixes.
- Now using PFMoveApplication 1.16, which handles Curio's install into the Applications folder, up from the old 1.10 version we had been using.
- Now using LinkBack (last updated on September 18, 2013), so it contains the latest tweaks and fixes. This code framework was last updated by OmniGroup who has generously taken over LinkBack development. Note that it's important that other app vendors use this latest framework as well for maximum compatibility.
Speed Improvement: Idea Space Previews
The Good
Beginning in Curio 8, Curio began to generate PDF previews for each idea space in your project. These previews would reside within the project's file package alongside the idea space's data file in a file called __Preview.pdf
. They're useful when showing idea space previews within the Curio interface, and for emergency recoveries.
When we introduced the PDF Mirror feature in Curio 9, it took advanced of this ready-made PDF file to quickly compile a summary PDF file for the entire project containing these individual PDF's. This is wonderfully useful when syncing to Dropbox for viewing on an iOS device, for example.
The Bad
However, for certain complex idea spaces that contain high resolution images or multiple PDF documents the resulting idea space preview PDF's can be (a) very slow to generate, and (b) very large in file size. This was a rare occurrence for most customers, but for those it did impact it was incredibly annoying.
The Fix
With Curio 10 we're now defaulting to compressed JPG images for previews, unless PDF Mirroring is enabled. In addition, Curio now offers a Preview File Extensionadvanced setting so you can force Curio to use JPG, PDF, or even PNG.
Here are the results with a complex test idea space containing two dozen high resolution images:
- PDF: the resulting preview file for the idea space is 133 MB (!) and takes 9.0 (!) seconds to generate. Note, however, that the resulting PDF has selectable text and zooming into text and high resolution images renders perfectly (that's why the resulting file size is so large).
- PNG: the resulting preview file for the idea space is 3.5 MB and takes 0.3 seconds to generate. This is technically a lossless format, but zooming into text and images will still be blurry.
- JPG: the resulting preview file for the idea space is 345 KB (yes, kilobytes) and takes 0.3 seconds to generate. This is a lossy format, but you probably won't notice the lost detail (I honestly couldn't). The default JPG compression is 0.5 which is medium aggressive, although you can modify this with the Preview JPEG Compression Factoradvanced setting.
Of course, for the majority of idea spaces PDF previews are just fine and you won't encounter delays like this, as this is an exceptional idea space test case, but we want to optimize Curio as much as possible. Thus the safest route is using JPG and automatically switching to PDF only if PDF Mirroring is enabled.
One More Thing...
That PDF file size still bugged us so there's one more tweak we made: we now write the PDF to disk via a simple ColorSync filter which compresses it as much as possible while still preserving zoomability. Here's the result:
- Compressed PDF: the resulting preview file for the idea space is 41 MB and takes 9.4 seconds to generate. The result still has selectable and perfectly zoomable text and zooming into the high resolution images still looked perfect to my eye. So a bit slower to generate but much smaller in size.
So now when generating PDF previews, Curio automatically enables this compression but you can disable it with the Preview Compress PDFadvanced setting. Alternatively, you can tell Curio to use a custom ColorSync Quartz filter that you create if you're feeling particularly adventurous. Just write to Zengobi for details.
Security Scoped Bookmarks and Aliases - Revisited... Again!
Curio uses aliases to files in four key areas:
- Tracking aliases to project asset files that you dragged in while holding the ⌥ (Option) key down.
- Tracking projects displayed in the Projects gallery and the Status shelf.
- Tracking files specified by the Open File figure action.
- Tracking destination project paths for jump targets (such as jump actions, jump anchors, and idea space links) that jump to another project.
Aliases? Bookmarks?
The original Mac OS (a.k.a. pre-OS X!) create the concept of a file alias decades ago. It's used by the Finder in Mac OS and in OS X, and the same underlying functions are used by Curio to create, track, and resolve external file references.
While Apple continues to support alias functionality they are strongly encouraging developers to move to a newer technology they call bookmarks. And, when the App Store, and sandboxing, was released, Apple created a variant of bookmarks called security scoped bookmarks which can only be used by an apps if the user permitted.
Way back in Curio 8...
We started our migration from old-school file aliases to new-school bookmarks back in Curio 8 by storing both an alias and a bookmark.
In fact, the stored bookmarks were actually security scoped bookmarks (SSB) to get us ready for eventual sandboxing if we decided to offer Curio for sale at the Mac App Store in the future, where sandboxing of apps is required.
Then, when we needed to find the file, we would try the bookmark first and, only if it failed, we'd try the alias.
Tweaked in Curio 9...
However, we heard reports that SSB's can be very slow to resolve, which was pretty bad since some of our customers had projects that contained hundreds of references to external files. So in Curio 9 we reversed our logic by resolving the alias first and, only if that failed, would we attempt to resolve the SSB. Geez!
Tweaked again in Curio 10!
Now, in Curio 10, we reversed this again but with a twist!
While we store security scoped bookmarks we can be a bit smarter about resolving them:
- If a non-sandboxed Curio, like Curio sold from our Zengobi website, then we:
- Attempt to resolve the bookmark first but without requesting a security-scoped resolution (since we don't need it since we're not sandboxed) which makes them as fast as a normal alias.
- If the bookmark resolution fails for whatever reason then we fallback to resolving the stored alias information.
- If a sandboxed Curio, like Curio Express sold from the Mac App Store, then we resolve the bookmark in a security-scoped manner, as required.
The other change we made is to store last-resolved path information for several of our items so if the bookmark and alias fail we still have the original path info on hand if we need to display that to the user.
Other Technical Tweaks & Fixes
- Previously Curio would rely on Apple's Grand Central Dispatch to generate some style previews for us on app launch. However, that could result in dozens (~100!) of spawned threads. For Curio 10 this was changed to use Apple's NSOperationQueue where we limit it to 5 threads, and the result is almost just as fast (fewer lock contentions).