Hello! I want to clarify the usage scope of auto-renewable subscriptions. The guideline telling us:"If you offer an auto-renewing subscription, you must provide ongoing value to the customer. While the following list is not exhaustive, examples of appropriate subscriptions include: new game levels; episodic content; multi-player support; apps that offer consistent, substantive updates; access to large collections of, or continually updated, media content; software as a service (“SAAS”); and cloud support."So, it's emphasises, that there could be other cases. I want to be sure will my app be approved by the review, or not.My application is an offline business utility. It doesn't provide any cloud services or updating media content. The only reason to use subscriptions is that the app will be consistently updated according to: iOS updates, user suggestions, new features and bug fixes. So it's probably one of "apps that offer consistent, substantive updates", isn't it?What should I write to users and to Apple so that the app will be able to pass review?There are many reasons why I like auto-renewable subscription model, besides 85% revenue. It sufficiently lowers barriers for a user, thanks to the free trial and ability to cancel if the first experience was not satisfying. Moreover, it provides great feedback: looking at subscribed users count I'm able to decide, should I spend more time supporting this application, or should I pay attention to another, more successful aps. I also can release the app earlier, and gradually improve it constantly listening to user feedback. It's better than make a technically ideal paid app that nobody will buy. And I think it just more fair, because todays app are not "fire and forget" products and require continuous maintenance and updates.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
What is the process named TestFlightServiceExtension on my iPhone 6S, iOS 14.4? Is it safe?
What is the process named TestFlightServiceExtension on my iPhone 6S, iOS 14.4? It also can be found in one (1) crash report over the internet. Is this process safe?
Hi! I'm making a workout app for swimmers. Our QA is confused with the swimmingStrokeCount output. He's a sportsmen and when crawl he used to count 2 strokes per cycle, one for each arm. The output is incorrect and looking at numbers we suspect that HKWorkout counts only one arm.
Documentation doesn't say anything about it.
Is there any tool to automatically migrate data & data structure from Google Firebase to CloudKit?
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags:
CloudKit
CloudKit Dashboard
CloudKit Console
Hi! I wanted to test my app with Xcode and see how it handles network errors. So, in Devices and Simulators I activated Network Link Condition - 100% packet loss. Then I run the app and see the popup saying that it's unable to verify app for obvious reasons:
Unable to Verify App
An Internet connection is required to verify trust of the developer "Apple
Development: Vladimir Kelin
(<#teamid#>)". This app will not be available until verified.
How do I run the app with network condition, then?
Hello! I'm working on the watchOS app that provides user with multiple fancy complication sets. There are about 50 widgets in our WidgetBundle now. With this amount we reached memory limit and the app crashes:
Thread 1: EXC_RESOURCE (RESOURCE_TYPE_MEMORY: high watermark memory limit exceeded) (limit=15 MB)
I inspected complicationExtension.appex content and find out that most volume is occupied by the executable:
Localized strings (12 langs) altogether - 165 KB
Assets.car - 1.1 MB
Imported fonts TTF files altogether - 866 KB
complicationsExtension executable file - 8.2 MB
Why it takes so much space and how can it be made smaller?
Topic:
App & System Services
SubTopic:
General
Tags:
WatchKit
Watch Complications
Extensions
WidgetKit
Trying to get the relevant app (it exists and published) by this endpoint:
https://api.appstoreconnect.apple.com/v1/bundleIds/{id}/app
Receiving error 404:
"errors" : [ {
"id" : "ec7b1469-fe54-4ad5-9f2b-f665c31a6358",
"status" : "404",
"code" : "PATH_ERROR_REALTIONSHIP",
"title" : "The URL path is not valid",
"detail" : "The relationship 'app' does not exist on resource 'bundleIds'"
} ]
Doing everything according to documentation. Tried to pass both Bundle ID id and Bundle ID itself. What could be the problem?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect API
Tags:
App Store Connect API
Hello, fellow developers! How would you approach .watchface file to extract it's metadata? I need to know in which version of the app the face was created, to prompt the user to update the app if necessary.
Looking at binary I suppose that a .watchface file consists of a PNG previews and JSON metadata and it all packed in one file somehow. Probably archived with gzip.
It's not a question, I just want to share my experience of resolving a bug.
We where adding a new product to the app and couldn't get why it's not loading. StoreKit 2 simply did not return the product, so we switched to StoreKit 1 to get invalidProductIdentifiers from the response. The product was there of course. So many time was spend... We checked App Store configuration, everything was approved. Checked id, localization, multiple devices. Everyone start to get mad, we filled issues for RevenueCat and Apple. Then we uploaded a TF build (because product wasn't loading when running from Xcode). And, suddenly the product did appear there!
I understood that it can be connected to StoreKit Configuration, since it works only in debugger mode (Debug or Release), but not in TF. But there was no any .storekit files in the project folder. I search it many times - no success.
And finally the bug was resolved when I checked Run Scheme. As you can see on the screenshot, it has red value under StoreKit Configuration. That means there where a file before, but than it was removed. So I changed it to None and the product started to work in debug. Great!
I hope this post helps, don't fall to the same error as me!
Related article: Setting up StoreKit Testing in Xcode
Is it ok to have latency about 4 sec? The amount of downloaded data is less than 1 MB. Maybe I need to setup an index for every field requested?
We have a watchOS app that provides many configurable widgets. Those widgets are configured and installed with help of AppIntent:
public struct RectComplAppIntent: AppIntent, WidgetConfigurationIntent, CustomIntentMigratedAppIntent {
@Parameter(title: "Style")
var style: String?
....
}
However when I print WidgetInfos with getCurrentConfigurations(), I sometimes got nil for configuration. At the same time widgets are not loaded. Exact steps:
User installs the pre-cofnigured .watchface.
Complications are not loaded since configuration is missing. I print getCurrentConfigurations() and get entries like this:
WidgetInfo:
- configuration: nil
- widgetConfigurationIntent: nil
- family: accessoryRectangular
- kind: Rectangle
Then user force-touches a face and opens editing mode. Returns to watch app, prints infos:
WidgetInfo:
- configuration: <INIntent: 0x780d290> {
style = vol1Logo;
}
- widgetConfigurationIntent: nil
- family: accessoryRectangular
- kind: Rectangle
– Suddenly intent appears with the correct style and complications start to show up.
How do you think, why it happens? Why after .watchface install all the WidgetInfo has nil intent (configuration)? What helps them to load later?
You can try this face yourself: https://cdn.watchfaces.co/watchfaces/glance-minimalist.watchface
Topic:
App & System Services
SubTopic:
Automation & Scripting
Tags:
WatchKit
watchOS
WidgetKit
App Intents
There is a such method in Bundle:
func classNamed(_ className: String) -> AnyClass?
The description says it loads the Class object for className. It's, obviously, an Objective-C stuff. I started from Objective-C but didn't used it, preferring NSClassFromString.
Now I suddenly tested it in various applications. I was surprised that it doesn't work in iOS apps neither in Playground:
import Foundation
class TalkingFruit {
func greet() {
print("Hello, playground")
}
}
@objc class LagacyFruit: NSObject {
}
print(Bundle.main.classNamed("TalkingFruit") ?? "no class")
// no class
print(Bundle.main.classNamed("LegacyFruit") ?? "no class")
// no class
print(Bundle.main.classNamed("NSObject") ?? "no class either")
// no class either
And now I have a question: Does it even work? And how it's supposed to be used? Working use case example would be great.
I'm trying to delete many records with one CKModifyRecordsOperation and getting this error:
<CKError 0x600000dbe4f0: "Limit Exceeded" (27/1020); "Your request contains 552 items which is more than the maximum number of items in a single request (400)">
This obviously means, that Modify Operation has record limit of 400 which is equal to CKQueryOperation.maximumResults. The good solution here would be to chunk the array of records into subarrays with length less than 400 and add multiple delete operations to the database.
The only problem is that the limit for CKModifyRecordsOperation is neither documented nor provided with a constant, so it's basically a magic number.
In hope that my prayers would be heard I want to ask to add maximumResults constant to CKModifyRecordsOperation.
I posted a question 7 days ago and now it looks like I can't edit or delete it.