iOS 15.4.1 has also resolved the issue on my devices. I also noticed a new "diagnostics" in both App Clips and Universal Links that lets you locally test the pathway to your server. I assume this is a mini AASA job that they're running. Maybe it isn't new with 15.4.1, but very cool and handy just the same.
Closed out my feedbacks FB9961137 and FB9961139.
Post
Replies
Boosts
Views
Activity
I am also experiencing this on several of my devices. It worked before in an earlier iOS 15.x release, but I cannot find the "Local Experiences" listing on iOS 15.4 public release either within the Developer settings pane. This makes it impossible to test some experiences as well as having the App Clip card be shown for local demonstrations to business partners.
@eskimo, can you help get some visibility to this?
The instructions for testing App Clips locally is unchanged from the documentation.
On your test device, open the Settings app, navigate to the iOS developer settings by choosing Developer > Local Experiences, and select Register Local Experience.
I created a few feedbacks:
App Clips Framework: FB9961137
Xcode Developer Tools: FB9961139
Feedback Assistant: FB9961143
The experience within the settings application, both your app listing and the location services will only show your app AFTER your code has made a request via one of the several authorization APIs. Do you have an onboarding experience or request permission at the time of usage (like when showing a map)?
I've been actively developing and using all of the latest iOS versions and have not observed this in my fitness app, my competitors, or the new app I'm developing using location updates, region monitoring, significant location change, etc. That having been said, I know that requesting location authorization on some watch simulator configurations does NOT show the authorization prompt on the simulator. The same code works on a real device. Probably worth sending in a feedback with a sysdiagnose if you can reproduce something like that on a physical device.
Out of curiosity, which features of Core Location are you using that doesn't appear to be working?
Are your two subscription products part of the same subscription group, or not organized in groups at all? If so, I think this is by design and not allowed to 'hide' it from the user. If they're in the same group it is treated like 'tiers' and the user has the ability to switch between the levels.
What I'd do is ensure that they are in two different groups, call one "legacy" and the other "current".
Within your "legacy" have the following subscription product:
Original Price for early adopters that get grandfathered in price
Within your "current" group, have the following subscription product:
New Price for new users
I assume your logic does something to the effect of if account created before cutoff date, offer reduced rate, else show new pricing. The idea is that when the user elects to manage their subscription, they will ONLY be shown what is within the same subscription group (I think if you don't use groups they see all products?). So, ensure they're in the correct group, and they'll only be able to manage those options. One thing you'll have to prevent in your UI, is disallow the user from subscribing to a product within both groups.
Take a peek in the developer app for some of the WWDC presentation and tech talks. Here are a few links to get you started:
Architecting for Subscriptions
Designing for Subscription Success
Engineering Subscriptions
Sounds to me like a simple "Restore Purchases" workflow would get you in compliance with requirement 3.1.2. Yes, a user who is signed in with their AppleID will have access to their purchases across devices, but only if you've implemented the logic to make it happen.
Do you have this? If so, I'd point it out to App Review, otherwise, it is a miss and you should implement it.
This does two things:
Allows the user to restore that purchase (subscription) on the same device if they uninstalled and reinstalled your app
Allows the user to access the content on all of their iOS devices.
This would be a great opportunity to take a look at the new StoreKit 2 APIs along with the new on-device receipt validation.
Meet StoreKit 2
The new signatures will give you a per-record result of Result<CKRecord, Error> as described in the method signature. So when you ask for records with IDs "ABCD" and "EFGH", lets say only ABCD exists, you'll get a dictionary back with two key-value pairs, the first being ABCD with the result value of .success(CKRecord) and the second of EFGH and .failure(UnknownItem).
Have a watch of the session you linked (10086) from 2021 and take note of the changes to the CKFetchRecordsOperation. The same thinking to the per-record error reporting also makes its way into the convenience methods on CKDatabase.
Do you mean uploaded via CKModifyRecordsOperation? What is the quality of services, did you set it to atomic, 30 pieces of data, does that mean 30 records, or 30 fields on a single record? Can you describe your setup a little more?
To ask an obvious question, you have set your AppIcon in your asset catalog right? I noticed that during development, my app icon is also not shown in the list of "look up by email" so it might just be that unpublished apps don't have their icon shown within the settings app in those places.
Watch this video and it will describe the enhancements made this year in full detail for the new resultBlock closures (and new async methods too!) Having migrated over to the new API, it is really a nice update though some of my closures were gnarly (doing atomic processing with records that referenced each other as an example).
What's New in CloudKit WWDC21
How much data are you trying to synchronize when the user has the feature enabled? You could have two containers, one that is local only, and the other that is the cloud container. I'm not sure that simply 'flipping the switch' would propagate / synchronize as fast as the user is expecting.
The difficult part with this approach would be migrating the data from one store to the other as they change the value.
Are you expecting immediate propagation when records are modified or eventual propagation? What is your 'expectation' for acceptable delay in the background? I'd have to imagine that data synchronization in the background is supported, but I don't remember any videos stating this explicitly. Does your app make use of any other background execution modes?
The way I achieve this is through CKSubscriptions and notifications which is pretty much immediate as long as the push volume isn't too high for a given device, however I'm not using the CloudContainer and rolling my own Core Data / CKRecord translation.
Subscribe to record changes (insert, delete, update)
Request remote notifications on UIApplication instance
Implement the didReceiveRemoteNotification
Depending if data was purged (too much data in push payload), run a CKFetchRecordsOperation or CKQueryOperation
In the "What's New in CloudKit" video from WWDC21, there is talk about how the encryption works, namely, it uses iCloud Keychain on device. Based on this, I'd have to assume that no, encrypted fields are not supported by the CloudKit JS library OR CloudKit Web Services (I'm writing a swift library for this).
Is this for Mac, or iPhone/iPad?
Why not have all of the games within a single application target?
If you want to continue down your 'hub' or 'game launcher' approach AND you're the developer of all of the mini games, you could implement custom URL Schemes for iOS in each and every target. Learn about URL Schemes. The technology is old and has downsides for production but for a school project should get you what you need.
If you plan to submit this to the store I'd highly encourage you to consider rearchitecting the apps into a single app.
The length of the video is less important, it more depends on the file size. Also for more context to your question, is this app only for iOS?
You could look at using CloudKit and saving the files as a CKAsset. Big apps like Photos are built upon that infrastructure. Think like when you have a video saved and then share it with an iCloud link. The tech is being used under the hood to some extent.
CloudKit has storage limits that ultimately might not pan out for your usage but it's my favorite storage. For my usage and volume it is free, built into the OS, and more importantly, supports background uploads, etc. I really dislike third party 'blob storage' libraries because they never seem to support background url sessions for uploading in the background and out of process.
Make sure that the account type is an 'organization' account. If you're getting added to an individual account, inviting others last I checked was supported in the UI, but upon accepting you can't do anything useful.