Post

Replies

Boosts

Views

Activity

Reply to How to pass URL to iOS app from share sheet, and automatically open app?
Is there a known iOS restriction or trick for allowing an extension (share or action) to open its containing app directly? This isn’t allowed. (We don’t know why.) https://developer.apple.com/documentation/foundation/nsextensioncontext/1416791-open This says “Each extension point determines whether to support this method, or under which conditions to support this method. In iOS, the Today and iMessage app extension points support this method. An iMessage app extension can use this method only to open its parent app, and only if the parent app is shown on the iOS home screen.” It would be great if it explicitly said “other extension types do not allow it”; it doesn’t say that, but it is true. If you search StackOverflow you’ll find hacks that bypass this restriction. They seem to involve walking the containing app’s objects to find an unrestricted open() method on the UIApplication. In practice apps that do this do seem to get approved by app review; you may or may not want to risk it. In the case of Safari, you may be able to do it from a Javascript web extension, with some friction. See my recent thread about that.
Topic: App & System Services SubTopic: General Tags:
Mar ’25
Reply to Redirecting to an app's universal link from and app extension popup
Custom URL schemes seem to work a bit better than universal links. In all the cases where the universal link attempts to open the web page and adds a page banner saying "Open in APP", the custom URL scheme instead presents a blank grey page with a popup saying "Open in APP?". Although both involve the same number of taps for the user, the latter is much more better in practice as it's obvious what the user has to do.
Topic: Safari & Web SubTopic: General Tags:
Mar ’25
Reply to Redirecting to an app's universal link from and app extension popup
you need to display the link with an <a href and let the user tap the link. It seems that if I do this within the popup.html, it doesn't work; it opens a new tab, redirected to the web content of the universal link with the "open in app" banner. On the other hand, if I put the <a href="universal-link"> in the content, tapping on it does open the app. Is this a deliberate limitation on what Safari extensions are allowed to do?
Topic: Safari & Web SubTopic: General Tags:
Mar ’25
Reply to Account Flagged 3.2(f) and no reply at all
Posts like yours are quite frequent on the forum. I don't recall anyone ever reporting that their account was re-instated. You are probably doomed. I find this constantly terrifying. The lesson is, don't rely entirely on Apple for your income. Make sure you have your eggs in more than one basket. Don't spend your time specialising in Apple-specific technologies, but make sure you have technical skills that you can redeploy to other jobs when necessary.
Mar ’25
Reply to Business model change confusion: premium -> freemium (originalAppVersion)
I have an app that includes the original version number in analytics that it sends me. I'm getting this by decoding the receipt in the app, not using AppTransaction. Examples of the version numbers that I get are 4.4.1622388619, 1.2.2 and 2.4. This is an old app. At some point, I started using timestamps as build numbers - hence the 1622388619. At other times I had three-level version numbers, i.e. 1.2.2 is the second bug-fix update for version 1.2. The missing part of the puzzle is what values these versions of the app had in which keys in their info.plists. Looking at just the current version of the app, I have CFBundleShortVersionString = 4.11 and CFBundleVersion = 4.11.1718374078. I believe these are manually set in the info.plist, rather than letting xcode populate them from other fields in the build settings (it's an old app, that's how it used to work). This reports the full 4.11.1718374078 in its analytics. So I guess that the "original version number" that you get from AppTransaction will be the same as the CFBundleVersion in your info.plist - whatever that is. You are probably letting xcode create this field, so check what is actually present in the info.plist in your final app. If I were you, I'd parse the string from the AppTransaction. If it has one component, assume it's a build number; if 2, assume it's a short version number; if 3, assume its version number plus build. (Etc.) Then determine whether it's "new" or "old" based on whatever you have. If you're using revision control versions or checksums, timestamps, or a global counter for your build numbers, this shouldn't be too difficult. It's more problematic if you have incrementing build numbers that you reset for each release. Note there is also the original purchase date, which could be easier to use. (I understand this is different on macOS.)
Mar ’25