Post

Replies

Boosts

Views

Activity

Reply to UITabbarController issue on iOS 18
So I just want to get confirmation from Apple if this will be a new update for UI events or just an issue that will be fix in upcoming iOS versions. I don’t see this mentioned in any iOS 18.* release notes. So there are a few possibilities: It’s a newly introduced bug. Consider submitting a bug report via Feedback Assistant. (And post the bug number here, just for the record.) It’s a fix of a previous bug, but they forgot to mention it in the release notes. Consider submitting a Feedback on this. It’s merely a change from old valid behavior to new valid behavior, with no release notes required. I vote for the 3rd interpretation. Unless the UIKit documentation already covers the relative ordering of these calls (thus establishing an API contract in this area) then either order is plausible. Is the view going to disappear? Yes. Did a new tab get selected? Yes.
2d
Reply to Returning One Component of Struct as Encoded Value in JSON
You are close. The custom encode(to:) just needs to be the inverse operation of init(from:) (using a single value container) like this: func encode(to encoder: Encoder) throws { var c = encoder.singleValueContainer() try c.encode(asString) } Should I do JSONSerialization instead? Nope! That’s a huge step backwards from the nice Swift Codable API. BTW, would it be feasible to make asDouble be a computed property, derived from asString as needed? Or the other way around? Ideally only one of them would be a stored property to serve as the single source of truth.
Jan ’25
Reply to Is there a way of specifying unicode characters for the BUNDLE_DISPLAY_NAME in an .xcconfig?
Just enter the desired character directly in the xcconfig file. The XML character reference ߒ isn’t needed since an xcconfig file isn’t XML. It’s just a text file encoded in UTF-8 so just about any character should work. Also note that you can enter this directly in the Info.plist file too. The XML character reference syntax is fine of course (and improves readability in this case) but isn’t needed in most cases.
Jan ’25
Reply to Tracking eSIM data usage
Even worse, interface names such as pdp_ip0 and en0 are not considered API, so you really shouldn’t rely on them at all. (Search the forum for those names for more about this.) And even if each SIM got its own documented BSD interface, the deprecation of CTCarrier means it would be hard to even figure out a name for the SIM currently being used. #include <ususl_caveat_about_specially_entitled_carrier_apps>
Jan ’25
Reply to is forKey:fileSize considered accessing non-public API?
is forKey:fileSize considered accessing non-public API? value(forKey:) itself is public API of course, so you likely wouldn’t get rejected by whatever means App Review uses to try to flag more obvious non-public API usage. However, you are relying on undefined behavior, which is still a bad idea for compatibility. The documentation of that class doesn’t mention a property by that name being supported via KVC. In fact, at this very moment, an engineer at Apple may be busy rewriting PHAssetResource in a way that still conforms to the documented API but no longer responds to fetching that particular property via KVC, and your code would stop working in the next OS release. Make sure your app can handle that.
Jan ’25
Reply to Scanning nearby Wi-Fi AP with IoT device
While preparing for your one-on-one App Review consultation, just note that lots of IoT companion apps do exactly what you describe, ranging from (just looking around my own house) security cameras to dog trackers. Also note that Wi-Fi scanning directly within apps is “limited or restricted” by simply having no supported API for doing so. There is no such restriction on receiving blobs of data from a connected device and displaying them to the user.
Dec ’24
Reply to Causes of disordered dictionary in Swift
That’s correct, for the same object. The original description didn’t clarify if you were doing this, with a single dictionary: let object = Test() object.test() object.test() ...or doing this, with a new dictionary each time: Test().test() Test().test() If would be unexpected to get the varying results if doing the first case.
Dec ’24