Posts

Post marked as solved
276 Views

Siri Intent Extension - How to just read result?

Hi folks,I'd like to add a Siri Intent Extension to my Objective-C project. Users should be able to pick it in the "Shortcuts" app to trigger it by voice. The extension should only read out a result string to the user. Sounds quite simple, doesn't it?So far I've enabled Siri capability for my app, added the Intent Extension, defined the intent with a fixed result, and implemented a dummy handler, but Siri doesn't show my shortcut and I assume that's because I haven't donated the shortcut so far.Unfortunately I cannot get my brain around the concept of donations (in this context): My app is not going to be launched, there is no specific workflow related to the shortcut, but it should just tell the user what their next lesson a school is: no required parameter, neiter any confirmation, nor a user interaction, not even a specific Intention UI...Is a donation required to make Siri recognize my shortcut? So the app needs to be run at least once to use the shortcut? Does my app need to request Siri access from the user? All examples I found were dealing with more complex scenarios, including app integrations. Do I need to walk all this road?Any help is appreciated, Mattes
Asked
by MyMattes.
Last updated
.
Post marked as solved
345 Views

Siri is not speaking shortcut voice responses

Hi folks, Last year I added Siri intents to my iOS app, providing class room information to the user. Worked nicely with iOS < 14: The user could define a shortcut with the corresponding action, e.g. "Next Lesson", and Siri read the result from my intent definition (voice only dialog response). With iOS 14 Siri isn't reading responses anymore, but is only giving the feedback "Okay, viewing with...": So the shortcut is run, displaying the result provided from my app, but not reading it out loud. Unfortunately this was the main purpose of my intents, asking Siri just for some information w/o looking at the phone. Is this a general design decision in iOS 14? What do I need to implement to make Siri (again) reading intent results? Currently I can only think of a bypass, putting the result text into the clipboard and adding a second action reading the clipboard (which is an iOS-provided one). Any thoughts? Mattes
Asked
by MyMattes.
Last updated
.
Post marked as solved
314 Views

Receipt validation in Mac Catalyst

Hi all, I'm currently struggling with implementing In-App purchase in a Mac Catalyst app. After solving (at least some) hurdles building the appropriate OpenSSL libraries, receipt validation is the next challenge: In the past I used a 3rd party tool ("Receigen") to validate receipts and extract e.g. IAP information. It looks like the Mac Catalyst build is not receiving any receipt the same as an iOS app. My first assumption was a different path in the app bundle (like under macOS), but so far I couldn't locate any receipt... Is receipt validation (and IAP) supported for Mac Catalyst apps? Is there any information about the corresponding receipt location, and how validation should happen? The process is quite different between iOS and macOS... Any help is highly appreciated, Mattes
Asked
by MyMattes.
Last updated
.
Post marked as solved
1.4k Views

Extended file attributes stripped by iCloud sync

Hi!I have two companion apps, iOS and macOS, supporting iCloud Drive to sync files between devices.Both apps are operating on 3rd party file formats, which are - under certain conditions - enhanced with additional information. This metadata is currently saved in "extended file attributes" by using setxattr / getxattr .Unfortunately I realized that the corresponding file attribute is stripped during iCloud synching. Changing the originally individual attribute name to "com.apple.ResourceFork" was unsuccessful, too. Some attribute seem to get synched, but I don't want to hijack attributes with other purposes, which will lead to unwanted side effects.What is a supported way to store metadata with a 3rd party file format for iCloud syncing, when a file-wrapper is no option?Greetings, Matthias
Asked
by MyMattes.
Last updated
.
Post marked as solved
423 Views

Mac Catalyst and OpenSSL

Hi folks, I'm currently implementing In-App purchase into a Mac Catalyst app, and facing troubles linking to static OpenSSL libraries. Currently - as in other projects - I'm using a 3rd party tool to implement receipt validation (Receigen), which uses static OpenSSL libraries. These need to be built with a corresponding target (x86_64-apple-ios13.0-macabi?), but so far I wasn't able to compile / link the sources using the build-libssl.sh script from https://github.com/x2on/OpenSSL-for-iPhone. Unfortunately I a newbie when it comes to building OpenSSL from sources with individual configs. Can anyone point my to some information ... all I found on SO were references to the mentioned target and GitHub repository. Did anyone of you integrate OpenSSL (or even Receigen) in a Mac Catalyst app ... and how? Maybe it's only me over-complicating things. Any help is appreciated, Mattes
Asked
by MyMattes.
Last updated
.
Post not yet marked as solved
188 Views

Apple Business Manager and IAP

Hi folks,I'm offering a freemium app with an IAP option to unlock features from macOS App Store. Now I was contacted by a company interested in purchasing some licenses, and distributing it to their users by Apple Business Manager. According to them the app's IAP cannot be centrally purchased / distributed.Is Apple Business Manager supporting In-App purchases, and if so are there any specific configurations etc. to follow?Any help appreciated, Mattes
Asked
by MyMattes.
Last updated
.
Post not yet marked as solved
364 Views

Quick Look extension on iOS: How to swipe?

Hi folks,I'm currently developing Quick Look thumbnail and preview extensions for my custom file types on iOS. Works pretty well, although the 120 MB memory limit is sometimes a road block for huge / complex files.But so far I couldn't figure out how to impement a UIGestureRecognizer which allows the user to swipe from one preview to the next. Apple supports this with its default preview for unknown file types, showing only the file name and size. Unfortunately neither the documentation nor the several WWDC videos are refering to gestures, and there is literaly zip information on the web (except Apple's)... Looks like only very few developers are currently supporting Quick Look on iOS for their file types.Any help or pointers into the right direction are much appreciated!Mattes
Asked
by MyMattes.
Last updated
.
Post not yet marked as solved
400 Views

[Catalina] Quick Look doesn't extend Sandbox for "related items"

Hi folks,My Quick Look plugin reads a "related item" in addition to the file to be thumbnailed / previewed. Therefore I implement a NSFilePresenter as described in scenario 2 of the link Apple documentations:https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW22This approach worked well until macOS 10.15 "Catalina" (and even works there for the main app). When previewing a file with Quick Look the related item file is not read. I assume the sandbox of Quick Look is not extended to the related item.Before filing a RADAR, does anyone has a similar QL plugin and observing the same behavior?Greetings, MattesEdit: If I perform the preview using qlmanage the related item is read...
Asked
by MyMattes.
Last updated
.
Post marked as solved
646 Views

UIDocumentBrowserViewController and “related items”

Hi folks,I’m currently providing my own file browsing UI including thumbnails, file operations (like rename, delete, copy, move) and iCloud Drive synching in my app. With the last update I changed the deployment target to iOS 11, and I am thrilled to utilize the UIDocumentBrowserViewController ... but my app heavily relies on “related items”:Each main file is accompanied by a second file including meta data, which has the same name, but a different extension. Currently my app defines the second file as a related item, ensuring proper file coordination. In all file operations both files are handled synchronously, e.g. renaming or deleting both files.Is there any way to accomplish this with a UIDocumentBrowserViewController? Although I can overwrite corresponding UIDocument’s methods to read / write both files, I found no way to hook into these file operations. Unfortunately I am not in the position to define a directory file wrapper as the main file needs to remain visible and easily accessible in the file structure.Any help - including pointers to some more detailed documentation - is appreciated. I watched the related WWDC sessions and read Apple’s documentation, but found it quite basic.Eliminating &gt;50% of my code and add various cloud storage providers is just too compelling. 🙂Greetings, Mattes
Asked
by MyMattes.
Last updated
.
Post not yet marked as solved
1.2k Views

"[default] Unable to load Info.plist exceptions (eGPUOverrides)" in Xcode debug console

Hi folks,While updating an NSDocument-based app to macOS 10.14 "Mojave" SDK Xcode's debugging console is presenting an error on app launch:[default] Unable to load Info.plist exceptions (eGPUOverrides)My app runs fine, and I'm quite sure the log entry is only an information with regards to external GPU support. The only meaningful reference of eGPUs and info.plist in the web is Apple's document about "Handling of External GPUs", unfortunately it doesn't mention any info.plist key with regards to overwriting ... Funny, but literaly dozens of people are blaming this log entry for all possible problems of their app 😉As mentioned I have no issue, but would like to clean up potential warnings. Has anyone some insights about the log entry's meaning and how to avoid it? I tried several potential info.plist keys w/o success...Greetings, Mattes
Asked
by MyMattes.
Last updated
.
Post not yet marked as solved
207 Views

BRContainerIsDocumentScopePublic in info.plist?

Hi folks,I got an issue with an iCloud Drive app folder not being syched to macOS, although it is working fine between iOS apps. I spent a DTS ticket, provided sample code, did some testing with the DTS engineer and filed two corresponding radars ... the only possible workaround seemed to be a companion macOS app, leaving my Windows customers in the dark (not tested yet).Now I received a response to one of my radars (#30248725) as follows:This issue behaves as intended based on the following:From the attached project’s plist file it doesn’t appear that BRContainerIsDocumentScopePublic is set to true.Please update your bug report to let us know if this is still an issue for you.I never read about this key in any of Apple’s documentations and Google didn’t find a single reference. I do know „NSUbiquitousContainerIsDocumentScopePublic“ (and included it in the info.plist)...Has anybody some more information about the key's purpose and how it is specified (at root level or nested in some dict)? I also commented the bug report, but - so far - without any response…Greetings, Mattes
Asked
by MyMattes.
Last updated
.
Post marked as solved
360 Views

Quick Look plugin in MAS application

Hi folks,preparing a macOS app for the Mac App Store is driving me crazy:The app includes two plugins for Quick Look and Spotlight, whose are signed with the same certificate and bundled with the main app using Xcode's "Embed plugin" target setting. Works fine for a distribution outside of MAS, but today I tried to validate against the App Store. Only a gerneric archive is built and the Validate / Submit options are disabled. Apple describes the problem here, but without a real solution (or I'm too dumb to realize it):The page mentiones to build a "single bundle application" ... but IMHO Quick Look and Spotlight plugins are always separate bundles, imbedded in the applications bundle.Does that mean I cannot distribute an app with these plugins through the MAS? Or how to build an archive which can be validated / submitted?Please help, I'm desperate, Mattes 😕
Asked
by MyMattes.
Last updated
.
Post marked as solved
919 Views

Restoring purchased products on macOS

Hi there!I'm currently trying to implement IAP in my macOS app and struggling with the feature to restore purchased (non-consumable) products for various reasons:When I request a receipt refresh submitting a SKReceiptRefreshRequest according to Apple's doc (in the sandbox, outside of Xcode), the delegate method- (void)request:(SKRequest *)request didFailWithError:(NSError *)error is alway called with an error = nilI realized that SKReceiptRefreshRequest is only available since macOS 10.9, while the other StoreKit classes / protocols exist since 10.7; How to handle refreshes with a deployment target &lt; 10.9? Most important: What exactly is the purpase implementing this function? I think the user can only "loose" his purchases when deleting the receipt from the app bundle (or the app bundle itself). Then he can re-download or restore the app and a receipt is requested during the first launch. When does a user need to restore a purchase which is a non-consumable product to unlock some app funcationality? Is this function mandatory for the App Store Review?Any help or hint is appreciated, Mattes
Asked
by MyMattes.
Last updated
.