Post

Replies

Boosts

Views

Created

Determine if current device has physical home button
Is there a way to determine whether the current device has a physical home button or not? I am building part of a UI which is very much like the Files app - it has buttons for "iCloud Documents" and "Documents on this device". For the latter, it will use a suitable symbol from SF Symbols i.e. "iphone" or "ipad" (or something for Macs). Just like the Files app. But I notice that the Files app uses the ".homebutton" symbol variants on older devices that have a physical home button. What is the easiest way to replicate that? I was considering looking at the "iPhoneNN,M" string and comparing it with the model number of the first devices without a physical button, but that is complicated by e.g. the current iPhone SE, which is "iPhone14,6". I don't want to have to maintain a table. Is there some easy way to do this? Thanks.
3
0
3.4k
Jul ’22
App Store XML API going away in November
Today I've received an email from Apple telling me that the App Store XML API is going away in November. (See e.g. https://help.apple.com/asc/appsspec/en.lproj/static.html). I have been using this API for some years to upload screenshots andIAP details (I have an app with a large number of IAPs). I'd like to thank Apple for giving me three months to implement an alternative. That's much better than the one month warning that they gave me for the last feature that they removed, IAP hosted content. Still, it's frustrating that I need to do a load of work to replace something that has been working fine for years. Having been an iOS developer since 2008 I've got a lot of accumulated "stuff". These days, I seem to spend more time adapting to things that Apple have deprecated than working on new features. And I constantly worry about what is next for the chop.
2
0
873
Jul ’22
Disable sprintf deprecation warning
Dear Experts, Xcode 14 is giving me a new deprecation warning about sprintf. I understand why this is here (*) but I need to suppress it in some cases. I don't want to disable it everywhere (or lose other deprecation warnings). Specifically, I #include some Boost headers which use it in inline functions. I know that I can use #pragma to disable it, but I don't want to modify the Boost headers. Adding #pragma everywhere that I #include a Boost header is also unappealing. What other options do I have? (*) I'm not enthusiastic about the suggesting in the warning to use snprintf instead; snprintf leaves the destination unterminated on overflow, which can be just as bad as the sprintf behaviour.
3
3
5.4k
Sep ’22
UIFont monospacedDigitSystemFont doesn't work
Dear Experts, Does monospacedDigitSystemFont work for others? It is supposed to be a font where digits are monospaced, but other characters aren't. This is especially useful for things like counter widgets, where you don't want the total length of the string to fluctuate as it updates. When I try to use it I get the same results as for the regular system font, i.e. digit 1 is narrower than the others. [UIFont monospacedSystemFont...] does work correctly.
2
0
1.2k
Sep ’22
UIImage and CGImage have different aspect ratio for SFSymbols
Dear Experts, I create a UIImage for an SFSymbol using [UIImage systemImageNamed], get its CGImage, and look at the sizes of each: UIImageConfiguration* config = [UIImageSymbolConfiguration configurationWithPointSize: 64 weight: UIImageSymbolWeightLight scale: UIImageScaleMedium]; UIImage* img = [UIImage systemImageNamed: @"chevron.compact.down" withConfiguration: config]; CGImageRef c = [img CGImage]; printf("UIImage size %f x %f, CGImage size %f x %f\n", img.size.width, img.size.height, CGImageGetWidth(c), CGImageGetHeight(c)); (Consider that pseudo-code, it's not an exact copy-paste.) Results: UIImage is 70.3333 x 25.6667 and CGImage is 163 x 43. So the aspect ratios (W/H) are 2.74 and 3.79 respectively. That can't be right! I don't expect the UIImage and the CGImage dimensions to be the same, because of the UIImage's scale (which is 3 in this case). But that should be the same for both dimensions. The effect is most pronounced with symbols that have an aspect ratio far from 1, e.g. recordingtape, ellipsis, and this chevron.compact.down. I believe that the CGImage aspect ratios are the correct ones. What is going on here?
5
0
1.8k
Oct ’22
Inkscape for custom SF Symbols
Has anyone had any luck using Inkscape to edit custom SF Symbols? It seems to work OK except that it doesn't understand the required layer structure. The layers are SVG group elements, which Inkscape doesn't seem to treat as layers. I think it must need some additional attributes to distinguish layers from other groups, or something. Edited to add: specifically it seems to need the attribute inkscape:groupmode="layer" on the element. I'm going to try adding this manually to the template and see what happens!
Topic: Design SubTopic: General Tags:
0
2
1.1k
Oct ’22
SF Symbols category in Feedback Assistant
I'm considering sending some suggestions for additional symbols, but I can't find a suitable category in Feedback Assistant. Am I missing something? What category would you use? Should I first file a bug against Feedback Assistant asking for a new category??
Topic: Design SubTopic: General Tags:
2
0
854
Oct ’22
NSFileCoordinator/Presenter and background location apps
Dear Experts, It is necessary to remove NSFilePresenters when an app goes to the background and re-add them when it returns to the foreground - if you don't do so, the app will be terminated. But what about an app that has the location background mode enabled? Specifically, I have an app that records your location, in the foreground or background, and writes this data to a file. It does writes to the file inside a coordinated write block, and monitors for writes from other processes. This works fine in the foreground. I'd really like to also get notifications of concurrent changes to the file while the app is in the background, but this doesn't seem to be possible. (It's actually more likely that a file will be modified by another app while I'm in the background - consider switching to the Files app, and then back again.) Any suggestions?
6
0
1k
Oct ’22
Membership renewal payment card info confusion
I recently received an auto-email from Apple: We noticed that there's no billing information associated with your Apple ID, so your Apple Developer Program membership cannot be automatically renewed. To renew your membership, update your Apple ID with a valid credit/debit card any time before your membership is scheduled to renew. Update now > https://appleid.apple.com/ (This was not entirely unexpected; I changed bank account a few months ago.) But when I visited appleid.apple.com, I found that I did have a card registered there. So I contacted support and they told me that I should actually add my card details at www dot apple dot com/shop/account/home (or my national variant of that) (*) - and indeed that website has its own section for registering payment cards, which was empty. So I have filed a bug saying that the auto email has the wrong link in it (FB11823024). I also asked support why there were two different places where card details are recorded, and got this reply: Apple Store payment information is used to pay what you are buying on the App Store. Apple ID payment is associate with your Apple Connect payment method information. Which is not very clear to me. What is "Apple Connect"? Anyway.... everyone beware. If you get that email, and you think that you have definitely registered a payment card, and you follow the link and it confirms that you have registered a payment card .... don't stop worrying, your renewal may still fail! (*) Yeah, this forum won't let me mention Apple's own websites without obfuscation.
0
0
2.5k
Nov ’22
Automatic build numbering
Dear Experts, What is the current best practice for build numbering? I ask because I am aware that when exporting an archived app for upload I am now asked if I want Xcode to manage the build number for me. In the past I have set a build number in the Info.plist, often based on the date, e.g. 2.4.20230218. Now, I am asked if I want that to be replaced by something like 2.4.7 (if I recall correctly). So far I've answered No. Previously I have searched for automatic build numbering and I've found web pages that suggest adding a script to the build process that automatically increments the build number in the info.plist, or similar. I've not tried to implement that myself. In some of my apps, I have code that needs to know the full version at compile time (e.g. app receipt validation). How would that interact with the new feature? Thanks, Phil.
1
1
998
Feb ’23
Different Files app behaviour on iPhone vs iPad
Dear Experts, I am confused by what seems to be a difference in behaviour of the Files app on an iPhone compared to an iPad. On the iPad, I seem to be able to view my app's Documents/ folder; on the iPhone, I can't. On the other hand I can access the app's iCloud documents on both devices. Is this the expected behaviour? If so, what is the rationale? Thanks, Phil.
1
0
768
Feb ’23
file: XML and XSLT in WKWebView
Has anyone ever tried to use XML & XSLT in WKWebView, with the files included in the app bundle? I.e. example.xml: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="transform.xslt"?> <page> </page> transform.xslt: <xsl:transform   version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="page"> <html> <body> <p>Hello World</p> </body> </html> </xsl:template> </xsl:transform> When I attempt to load that as file:///path/to/bundle/example.xml, I get a blank page (and nothing in the console). Various questions: I know that generally web console output inside apps doesn't appear in the logs, and there are various suggestions about injecting user scripts to fetch them by replacing e.g. console.log. But does that only fetch errors generated by Javascript, or does it also fetch other error messages? Should I be able to attach to my WKWebView's console from Safari on my Mac, over USB? If I try to view the same file using a file: URL in Safari on my Mac, I discover that security policy prevents a file: XML document from using a file: XSLT even if they are in the same directory; it considers all file: URLs to have different origins. I don't see that error with the WKWebView, hence question (1). Is there anything that I can do with WKWebView to permit access from a file: XML document to a file: XSLT document in the same directory, within the app bundle? I have tried using loadURL: allowingReadAccessToURL:, and that doesn't seem to work. I'm also aware of the WKSecurityOrigin type, and I wonder if I can use that to persuade WKWebView that the XML and XSLT are "same origin". Does this require that I implement a "content blocker"? Can a content blocker ever relax restrictions, rather than tightening them? Thanks for any suggestions!
0
0
798
Feb ’23
Can a WKWebView somehow display SF Symbols?
Does anyone know if it’s possible for a WKWebView showing a web page in the app bundle - a help screen in my case - to show SF Symbols, by name? I’d like the help page to include some of the symbols that I use for buttons elsewhere in the app. Can I do this without having to make PNGs of the symbols? Thanks.
1
0
1.2k
Feb ’23