Post

Replies

Boosts

Views

Activity

Is it possible to change the Xcode template type?
I've got a few years old app which was created using an Xcode template type of app. I'd like to split the model part of the code (model as in model-view-controller) out into a framework. Removed the view/controller source files to leave the model code is quick and easy, however the model code is large and complex with a couple of hundred of source files. Rather than create a new Xcode template type of framework and move the source files into there, is it possible to simply just change the template type of the existing project from app to framework?
1
0
98
2w
Are umbrella frameworks possible/discouraged?
I want to release a Framework F, containing several other frameworks (such as Realm, Appetitive, Cocoalumberjack, PhoneNumberKit) for use by app A. According to this article: https://medium.com/@bittudavis/how-to-create-an-umbrella-framework-in-swift-ca964d0a2345 They write, without referencing a source: "Although Apple discourage creating umbrella framework". Is that true, do Apple discourage umbrella frameworks, if so why and is it a very strong discourage or a mild one? If not discouraged, then how can this be achieved with Xcode 16? I've been attempting to follow a few tutorial to achieve this, such as https://medium.com/john-lewis-software-engineering/adding-a-third-party-framework-inside-a-first-party-framework-in-xcode-3ba58cfd08da however so far without any success. This last article mentions the Link Binary With Libraries section, which doesn't exist in Xcode 16. There's the Frameworks, Libraries, and Embedded Content section where I have been attempting to add the frameworks into my Framework F (choosing Embed without Signing). I'm able to successfully build Framework F, but when app A attempts to use it (adding F to the Frameworks, Libraries, and Embedded Content section with option embed and sign, or embed and don't sign, makes no difference) then I get run time errors about the umbrellaed frameworks not being able to be found.
1
0
164
3w
Sandbox push server down again?
Over the past few weeks I've seen several people mention pushes sent via the sandbox haven't been getting delivered. Today I'm also seeing that (though pushes sent via production are fine). So it would appear to be down again. What's going on recently, any reason it's so unstable these last few weeks?
1
0
145
4w
Xcode's default macOS Deployment Target is 11 which causes Testflight submission warning
If a new (iOS) project is created in Xcode then a default set of deployment targets and values gets automatically created and set as follows: If the iPad, Mac, and Apple Vision supported destinations are deleted from the Xcode general section, these deployment targets still remain. If the app is then built using Xcode 16 and uploaded to TestFlight/App Store then the following issue is reported: TMS-90899: Macs with Apple silicon support issue - The app isn‘t compatible with the provided minimum macOS version of 11.0. Why is XCode populating the macOS deployment target with a value that that results in this issue? Why is Xcode even populating all 6 of these targets at all when its for an iOS app and hence 5 of them are redundant? Can the macOS deployment value simply be increased to silence this issue? Or can these that aren't relevant to iOS be deleted (if so how)? TIA
0
0
361
Oct ’24
Does the iOS simulator append any different HTTPs headers to an iPhone?
I've got a bit of code which is making a HTTPS GET request. On an iPhone it runs as expected, however when running on the simulator there's a HTTP 400 response. I've logged the url and my http headers that I'm adding, and in both cases they are identical for the simulator and iPhone (there is no http body content). Therefore, as everything is identical, I'm wondering how it could work with hardware and not with the simulator? Does the OS append any additional HTTP headers before the request goes out (such as User-Agent for example) and might those be different between iPhone/simulator?
0
0
210
Oct ’24
Is Xcode 16 a battery drainer?
I've got a 2023 M2 MacBook Pro and used to get great battery life out of it (> 6 hours when using it for development purposes). Now however, all of a sudden, that has dropped off a cliff, and the only thing that has changed is Xcode 16 has appeared. As I'm compiling a project I can literally see the % amount of the battery charge remaining tick down in front of my eyes as I watch. I just compiled a project twice and during that time the battery dropped from from %89 to %79 and Xcode is listed as a culprit using significant battery drain. Anybody else noticed anything similar? Anything that can be done to to decrease Xcode's battery drain?
2
0
184
Oct ’24
What happened to logging in a Message Filter Extension on iOS 18?
If an app with a Message Filter Extension is run on an iPhone with iOS 18 installed then there's no logging output to the console (using print or NSLog), however there is logging in all previous versions of OS. Being able to view logging at run time for this component is essential as a debugging aid to see, for example, if the extension launches, if a text is handled locally or deferred to the network, to see if there's a network error, to examine the server response etc. Is there a specific reason it was disabled or is it accidental? Thank you
2
0
274
Sep ’24
Message Filter Extension not working with iOS 18 RC
If I run an app with a message filter extension on a phone with iOS 17.N then it works as expected. However if I run the same app (totally unchanged) on a phone with iOS 18 RC then there's multiple problems. I noticed there's no longer any logging from the extension in the Console (while there is for iOS 17 devices) in the messages app the filter sub categories aren't displayed (but they are on iOS 17 devices) if I try to debug the extension and place breakpoints in it, then there's an exception that occurs when the extension is enabled and the OS logs this (this doesn't occur with iOS 17 devices) '/private/preboot/Cryptexes/OS/usr/lib/swift/libswiftIdentityLookup.dylib' (no such file), '/usr/lib/swift/libswiftIdentityLookup.dylib' (no such file, not in dyld cache) I tried running on: iPhone with iOS 17.6 - no problems iPhone with iOS 18.1 beta - has all the above problems iPhone with iOS 18 RC - has all the above problems Was surprised the RC is so broken in this area as its release will be imminent. As things stand, I can't get a MFE to work at all with iOS 18. Anybody else with the same issues?
1
2
327
Sep ’24
"XCBBuildService quit unexpectedly" occurs %100 of the time with XCode 16 RC
I have a project which when I attempt to build with XCode 16 RC fails with the message "XCBBuildService quit unexpectedly". This occurs 100% of the time, thus I am unable to build the project. It first occurred in Xcode 16 beta 1 and has been present ever since, ever present in every beta; and now as its still present in the RC its highly unlikely it'll be fixed when the RC release becomes the final release. I submitted a ticket for this many weeks ago (FB14062261), but its not been looked at/updated. This is a problem in the short term because my app needs updating to use some iOS 18 specific features, in the longer term, it won't be possible to submit the app to the App Store if it continues to only be buildable with Xcode 15. As its impossible to build the app, I attempted to create a support ticket to get assistance. However I am unable to create a support ticket because the web page won't permit me to proceed raising a ticket unless there is a test Xcode project that recreates the issue. However, the issue does not occur with small simple Xcode projects. The Xcode project which I cannot be build contains dozens of sources files, thousands of lines of code, and many dependences. I can't submit that as the text Xcode project as its larger than that stated minimum requirements to attach to a support ticket. So how can I proceed, I can't build the app, I've raised a feedback ticket which hasn't been looked at, and when I attempt to raise a support ticket, the website won't let me proceed and create one. What can I do to get a support ticket created? What Xcode outputs: Process: XCBBuildService [9024] Path: /Applications/Xcode.app/Contents/SharedFrameworks/XCBuild.framework/Versions/A/PlugIns/XCBBuildService.bundle/Contents/MacOS/XCBBuildService Identifier: com.apple.dt.XCBBuildService Version: 1.0 (23000.1.226) Build Info: XCBuild-23000001226000000~13 (16A242) Code Type: ARM-64 (Native) Parent Process: Xcode [8990] Responsible: Xcode [8990] User ID: 504 Date/Time: 2024-09-09 14:03:16.8948 -0700 OS Version: macOS 14.6.1 (23G93) Report Version: 12 Anonymous UUID: EB8CED5F-F888-D71F-3893-33504A2FE3FD Time Awake Since Boot: 1800 seconds System Integrity Protection: enabled Crashed Thread: 13 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6 Terminating Process: XCBBuildService [9024] Application Specific Information: abort() called Kernel Triage: VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter Thread 0:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x1871fcdf4 mach_msg2_trap + 8 1 libsystem_kernel.dylib 0x18720f5e4 mach_msg2_internal + 80 2 libsystem_kernel.dylib 0x1872059c4 mach_msg_overwrite + 476 3 libsystem_kernel.dylib 0x1871fd178 mach_msg + 24 4 CoreFoundation 0x18731d680 __CFRunLoopServiceMachPort + 160 5 CoreFoundation 0x18731bf44 __CFRunLoopRun + 1208 6 CoreFoundation 0x18731b434 CFRunLoopRunSpecific + 608 7 CoreFoundation 0x18739945c CFRunLoopRun + 64 8 libswift_Concurrency.dylib 0x24eabd4e0 swift_task_asyncMainDrainQueueImpl() + 40 9 libswift_Concurrency.dylib 0x24eabd4a0 swift_task_asyncMainDrainQueue + 92 10 XCBBuildService 0x1043b392c main + 84 11 dyld 0x186eb3154 start + 2476 Thread 1: 0 libsystem_kernel.dylib 0x1871fd9b4 read + 8 1 XCBServiceCore 0x104c34688 closure #3 in ServiceHostConnection.resume() + 624 2 XCBServiceCore 0x104c326ed partial apply for closure #1 in Service.registerMessageHandler<A>(_:) + 1 3 XCBServiceCore 0x104c32a55 closure #1 in closure #1 in OS_dispatch_queue.async(group:qos:flags:execute:) + 1 4 XCBServiceCore 0x104c32a55 closure #1 in closure #1 in OS_dispatch_queue.async(group:qos:flags:execute:) + 1 5 XCBServiceCore 0x104c35c21 $sxIeAgHr_xs5Error_pIegHrzo_s8SendableRzs5NeverORs_r0_lTRyt_Tg5TQ0_ + 1 6 XCBServiceCore 0x104c326ed partial apply for closure #1 in Service.registerMessageHandler<A>(_:) + 1 7 libswift_Concurrency.dylib 0x24eabe0f9 completeTaskWithClosure(swift::AsyncContext*, swift::SwiftError*) + 1 Thread 2:: llb_buildsystem_build 0 libsystem_kernel.dylib 0x1872005ec __psynch_cvwait + 8 1 libsystem_pthread.dylib 0x18723e55c _pthread_cond_wait + 1228 2 libc++.1.dylib 0x187163b14 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 28 3 llbuild 0x10531730c (anonymous namespace)::BuildEngineImpl::executeTasks(llbuild::core::KeyType const&) + 4552 4 llbuild 0x105314390 llbuild::core::BuildEngine::build(llbuild::core::KeyType const&) + 580 5 llbuild 0x10532da38 (anonymous namespace)::BuildSystemImpl::build(llbuild::buildsystem::BuildKey) + 208 6 llbuild 0x10532dc14 llbuild::buildsystem::BuildSystem::build(llvm::StringRef) + 260 7 llbuild 0x1053203f4 llbuild::buildsystem::BuildSystemFrontend::build(llvm::StringRef) + 56 8 llbuild 0x1052a6d8c 0x10528c000 + 109964 9 XCBBuildSystem 0x104d8ad1c partial apply for closure #13 in BuildOperation.build() + 28 10 libswift_Concurrency.dylib 0x24ea89a4c TaskLocal.withValue<A>(_:operation:file:line:) + 304 11 XCBUtil 0x1048d8864 closure #1 in closure #1 in static Task<>.detachNewThread(name:_:) + 296 12 XCBUtil 0x1048854ec thunk for @escaping @callee_guaranteed @Sendable () -> () + 28 13 Foundation 0x188bc2e1c __NSThread__block_start__ + 76 14 libsystem_pthread.dylib 0x18723df94 _pthread_start + 136 15 libsystem_pthread.dylib 0x187238d34 thread_start + 8 <snip>
0
4
556
Sep ’24
Can a Live Caller ID server supply live data or must it be static?
With the Live Caller ID example server, the caller lookup dataset is defined in an input.txtpd and processed by running a ConstructDatabase command which creates a block.binpb and an identity.binpb file. In other words, a static input file is being processed into static block and identity files. However, in the real world, the data content for identified and blocked numbers is something which is in a constant state of flux and evolution, as new numbers becoming available, old ones become stale, numbers which were initially considered safe change into being considered malicious etc. etc. Is the example server just that, merely an example using fixed datasets, and an actual production server is able to use live every changing data to formulate its response back to the iPhone OS query? Here's a concrete use case - suppose it's a requirement to permit US nanp numbers but to block anything else. The total number of non US nanp numbers is so large and ever changing that it would be unfeasible to attempt to capture them in an input.txtpd file and then process that, and then to re-capture and re-process it endlessly. Instead what would be required is the ability for the Live Caller ID server to evaluate at query time, using a regular expressions for example, if a number is nanp or not. Is this possible?
1
1
387
Aug ’24
A Live Caller ID Extension is unable to read data from a shared group
Hello Apps and their extensions are able to communicate with each other by reading/writing data stored in a shared group location. However this isn't the case with the the Live Caller ID Extension - if data is written to group defaults for example (as opposed to standard defaults) by the app, then that data isn't readable by the Caller ID extension. This has the consequence that its not possible for a user to dynamically switch which data set the extension connects to. Consider the use case where the Live Caller ID Server has one data set where callers are not blocked, and another where they are blocked, then the caller id extension can route different requests to different datasets based on the "user tier". However as the extension can't read data from the shared group then the app can't communicate user preferences to the extension, therefore the switching isn't possible. Is this by design or due to the immaturity of the feature? If its by design, then it means the use case outlined above isn't possible, and thus greatly reduces the possible functionality of the Live Caller Id feature. (It would be possible for the app to install multiple extensions, each of which connects to a different data set by specifying a different user tier, but the user having to flip these one and off within the Settings app is a dreadful user experience).
0
1
311
Aug ’24
Obtaining carrier entitlements for development on behalf of carriers
Hello I work for a company which is not itself a carrier, however we develop applications on behalf of carriers (the relationship between us and several large household name US carriers has existed for many years). The applications that we develop typically need carrier and/or special entitlements, for example: com.apple.CommCenter.fine-grained/public-subscriber-info com.apple.developer.coretelephony.sim-inserted com.apple.developer.pushkit.unrestricted-voip com.apple.developer.usernotifications.filtering com.apple.developer.associated-domains Obtaining those entitlements for the carrier applications that are released to the App Store is itself not a problem as the customers apply for them and they are duly granted and applied to the applications. However, what is a problem is working around the strict Apple development and distribution requirements and limitations, and the consequences that has given that the apps don't belong to our Apple account but the customers. Typically, a customer would provide us a developer certificate and set of provisioning profiles, but they would keep the distribution certificate and do the TestFlight/App Store release themselves. There's two limitations that come into play here, the first is that we can't distribute the app to TestFlight and secondly, we can only install the customer's apps on hardware registered with their Apple account. Given how the limitation for that is 100 in total, and these are large companies, they just don't have slots available and hence we might have a single device on which their app can run. These are very severe limitations given the complex nature of the applications and the need to have several developers/testers involved, which isn't possible. To mitigate those limitations we have "mirror" versions of customers' apps, these are apps which are identical to the customer apps except they have bundle ids registered to our Apple account. This enables the apps to be developed by any number of developers and distributed via Testfight and hence to any number of testers. But the problem is, the functionality of the mirror apps is severely reduced due to the fact they don't have the entitlements of the customers' apps. To get to the point of the post - I would like to know if there any potential solutions to this? For example: could it be possible for our mirror applications to be granted required entitlements (given the relationships we have with the customers. I'm sure the customers could vouch for us as a company and the need for this) could the entitlements be granted if we switched the mirror apps over to an Enterprise account (as enterprise apps can't be released to the App Store)? any other technical options or suggestions? Thank you
1
0
648
Jul ’24
Is it possible for a Live Caller ID server to specify different datasets?
In the documentation for the example Live Caller ID server (https://swiftpackageindex.com/apple/live-caller-id-lookup-example/main/documentation/pirservice/testinginstructions) there is an example service-config.json. file shown (without thorough documentation). That config file, and the whole of the instructions, center around there being two datasets of numbers: block and identity. My question is - is it possible for more than one dataset to be specified i.e. for block1 and block2 to be specified? The use case for this would be - suppose the Live Caller ID server has a set of numbers it has identified as being nuisance callers and so it lists these in the block section. However user A might want all these nuisance callers to be blocked but user B does not. Therefore the Live Caller ID extension on the handset would need to use a different dataset on the server so that user A's calls from a set of numbers is blocked, but user B's are not. Note that I'm not suggesting that the Caller ID server should be capable of storing individual user's preferences. All that would be required would be two data sets: one where blocked content is none and and one where blocked content is some. Then a user/app could switch between them as indicated by the user. Is that possible? If the database structure and service-config.json etc. is not configured to permit that, then could two different servers be set up to achieve this instead? i.e. so the server url specified in the app's extension can be set at run time and not at compile time?
3
0
476
Jul ’24