Post

Replies

Boosts

Views

Activity

Reply to Is Settings.bundle deprecated? What required-reason API code to use?
Hi Quinn, thanks for your reply. the category of your app reading its own preferences I don’t see any such category. Which code are you referring to? BTW, do you understand the actual privacy issue here? Is it true that apps can illicitly read other apps’ NSUserDefaults values, and/or global settings? If so, is there a good reason for that being possible? Can it not be blocked by a technical change? The reason codes refer to “information that is only accessible to the app itself” (etc). Is there something that I need to do to make NSUserDefaults not accessible to other apps?
Topic: App & System Services SubTopic: Core OS Tags:
Mar ’24
Reply to SKStoreReviewController prompt limit after app upgrade
From the docs at https://developer.apple.com/documentation/storekit/requestreviewaction When your app calls this API, StoreKit uses the following criteria: If the person hasn’t rated or reviewed your app on this device, StoreKit displays the ratings and review request a maximum of three times within a 365-day period. If the person has rated or reviewed your app on this device, StoreKit displays the ratings and review request if the app version is new, and if more than 365 days have passed since the person’s previous review. will the app review prompt limit reset after app is reinstalled? I don't think so, no. and if the app is updated? Yes, but only when a year has passed since their last review.
Topic: App & System Services SubTopic: Core OS Tags:
Mar ’24
Reply to Possible to send an appeal to another reviewer?
Can we send an appeal for an app rejection to a different reviewer? No. the same person responded each time. How do you know that? They don’t normally give themselves names. We don’t even know to what extent they are human! If you say more about the rejection, people might have some advice. In my experience, there is never any point appealing. Just change whatever it is they object to. Don’t try to compromise, if they say “X is inappropriate“, you need to completely remove X from the app.
Mar ’24
Reply to How to find usages of Reason Required API?
Is Apple planning on extending their warnings to provide more information about where the usages are? ”File a bug”, ha ha ha. Are we left to find it ourselves? https://developer.apple.com/forums/thread/748621 I don’t know if that works for .xcframeworks; if not it’s probably fixable to do so. Do we need to resort to adding those reasons to our app's manifest? Which seems hacking since we probably don't know when of the allowed reasons are accurate. That is certainly what most people will do.
Mar ’24
Reply to Identifying "required reason" API call locations from app binary
Thanks Quinn. I can almost answer the original question, "from where do I call stat()?", from the link map file - except it describes where symbols are defined, not where they are used. But I can use it to get the names of the archive members that are being included in the binary: % grep '\.a\[.*\](.*\.o)' app-LinkMap-normal-arm64.txt ... [256] /usr/local/iphone-arm64/lib/libboost_container.a[6](pool_resource.o) ... I wasted a lot of time at this point because the nm man page mentions the archive(member) syntax If an argument is an archive, a listing for each object file in the archive will be produced. File can be of the form libx.a(x.o), in which case only symbols from that member of the object file are listed. (The parentheses have to be quoted to get by the shell.) but it doesn't work: % objdump --syms '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' ...or... % nm '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: error: '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)': No such file or directory However it's not mentioned in the llvm-nm man page; it seems to be nm-classic only (FB13691747), and that's not on my PATH. But if I call it directly it works: % /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm-classic -u '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' So now I can get all my app's undefined symbols, grouped by the object file or archive member in which they are used: cat app-LinkMap-normal-arm64.txt | grep '^\[' | sed 's/^\[[ 0-9]*\] \(.*\)$/\1/' | sed 's/\[.*\]//' | while read N do echo "$N" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm-classic -u "$N" done Splendid. I can now see that _stat is called from two places: libcrypto.a(conf_def.o) libcrypto.a(loader_file.o) and _fstat is called from one place also in libcrypto, and that's it.
Mar ’24
Reply to Ecosystem Feature Request: Relinquish App Name
I’ve seen a few posts here over the years from developers who believe that app names are unique. Why do you believe that? In my experience, Apple will approve apps with identical names to apps that are already on the store (one of my apps now has two such competitors). Regarding your idea, why do you need Apple to forward your request? Can’t you just contact them directly? Beware, if Apple acts as middleman they may want 30% commission on what you pay for the app name!
Mar ’24
Reply to Connect DSA trader question
English is not my native language. You can read it in 24 different languages: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32022R2065 Click on your preferred language near the top, then scroll down a lllooooooong way to find article 3, which includes the definitions. 3 (f) is "trader". (BTW, we only get it in English thanks to Ireland now.)
Mar ’24
Reply to Connect DSA trader question
I have no idea what a trader is. But you’ve just quoted the relevant definition of a trader! any natural person … who is acting … for purposes relating to his or her trade, business, craft or profession. I am an independent developer and have several apps in App Store. Is that your “trade, business, craft or profession”? If not, maybe it’s just a hobby? Or maybe you’re a volunteer for a charity?
Mar ’24
Reply to Is Settings.bundle deprecated? What required-reason API code to use?
Hi Quinn, thanks for your reply. the category of your app reading its own preferences I don’t see any such category. Which code are you referring to? BTW, do you understand the actual privacy issue here? Is it true that apps can illicitly read other apps’ NSUserDefaults values, and/or global settings? If so, is there a good reason for that being possible? Can it not be blocked by a technical change? The reason codes refer to “information that is only accessible to the app itself” (etc). Is there something that I need to do to make NSUserDefaults not accessible to other apps?
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Mar ’24
Reply to SKStoreReviewController prompt limit after app upgrade
From the docs at https://developer.apple.com/documentation/storekit/requestreviewaction When your app calls this API, StoreKit uses the following criteria: If the person hasn’t rated or reviewed your app on this device, StoreKit displays the ratings and review request a maximum of three times within a 365-day period. If the person has rated or reviewed your app on this device, StoreKit displays the ratings and review request if the app version is new, and if more than 365 days have passed since the person’s previous review. will the app review prompt limit reset after app is reinstalled? I don't think so, no. and if the app is updated? Yes, but only when a year has passed since their last review.
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Mar ’24
Reply to Possible to send an appeal to another reviewer?
Can we send an appeal for an app rejection to a different reviewer? No. the same person responded each time. How do you know that? They don’t normally give themselves names. We don’t even know to what extent they are human! If you say more about the rejection, people might have some advice. In my experience, there is never any point appealing. Just change whatever it is they object to. Don’t try to compromise, if they say “X is inappropriate“, you need to completely remove X from the app.
Replies
Boosts
Views
Activity
Mar ’24
Reply to How to find usages of Reason Required API?
Is Apple planning on extending their warnings to provide more information about where the usages are? ”File a bug”, ha ha ha. Are we left to find it ourselves? https://developer.apple.com/forums/thread/748621 I don’t know if that works for .xcframeworks; if not it’s probably fixable to do so. Do we need to resort to adding those reasons to our app's manifest? Which seems hacking since we probably don't know when of the allowed reasons are accurate. That is certainly what most people will do.
Replies
Boosts
Views
Activity
Mar ’24
Reply to Identifying "required reason" API call locations from app binary
Thanks Quinn. I can almost answer the original question, "from where do I call stat()?", from the link map file - except it describes where symbols are defined, not where they are used. But I can use it to get the names of the archive members that are being included in the binary: % grep '\.a\[.*\](.*\.o)' app-LinkMap-normal-arm64.txt ... [256] /usr/local/iphone-arm64/lib/libboost_container.a[6](pool_resource.o) ... I wasted a lot of time at this point because the nm man page mentions the archive(member) syntax If an argument is an archive, a listing for each object file in the archive will be produced. File can be of the form libx.a(x.o), in which case only symbols from that member of the object file are listed. (The parentheses have to be quoted to get by the shell.) but it doesn't work: % objdump --syms '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' ...or... % nm '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: error: '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)': No such file or directory However it's not mentioned in the llvm-nm man page; it seems to be nm-classic only (FB13691747), and that's not on my PATH. But if I call it directly it works: % /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm-classic -u '/usr/local/iphone-arm64/lib/libboost_container.a(pool_resource.o)' So now I can get all my app's undefined symbols, grouped by the object file or archive member in which they are used: cat app-LinkMap-normal-arm64.txt | grep '^\[' | sed 's/^\[[ 0-9]*\] \(.*\)$/\1/' | sed 's/\[.*\]//' | while read N do echo "$N" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm-classic -u "$N" done Splendid. I can now see that _stat is called from two places: libcrypto.a(conf_def.o) libcrypto.a(loader_file.o) and _fstat is called from one place also in libcrypto, and that's it.
Replies
Boosts
Views
Activity
Mar ’24
Reply to Ecosystem Feature Request: Relinquish App Name
I’ve seen a few posts here over the years from developers who believe that app names are unique. Why do you believe that? In my experience, Apple will approve apps with identical names to apps that are already on the store (one of my apps now has two such competitors). Regarding your idea, why do you need Apple to forward your request? Can’t you just contact them directly? Beware, if Apple acts as middleman they may want 30% commission on what you pay for the app name!
Replies
Boosts
Views
Activity
Mar ’24
Reply to Identifying "required reason" API call locations from app binary
Thanks for the link. That seems to use nm to scan the object files, in much the same way that I was using objdump. Note that for .a files, both nm and objdump group the symbols by object file. It's not necessary to unpack the .a file. The remaining problem is how to determine which members of a .a archive were actually included in the app binary.
Replies
Boosts
Views
Activity
Mar ’24
Reply to Connect DSA trader question
English is not my native language. You can read it in 24 different languages: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32022R2065 Click on your preferred language near the top, then scroll down a lllooooooong way to find article 3, which includes the definitions. 3 (f) is "trader". (BTW, we only get it in English thanks to Ireland now.)
Replies
Boosts
Views
Activity
Mar ’24
Reply to Connect DSA trader question
I have no idea what a trader is. But you’ve just quoted the relevant definition of a trader! any natural person … who is acting … for purposes relating to his or her trade, business, craft or profession. I am an independent developer and have several apps in App Store. Is that your “trade, business, craft or profession”? If not, maybe it’s just a hobby? Or maybe you’re a volunteer for a charity?
Replies
Boosts
Views
Activity
Mar ’24