Dive into the vast array of tools and services available to developers.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Apple-hosted managed assets
Hi, anyone managed to make this work? https://developer.apple.com/documentation/backgroundassets Trying for past few days and can't make it work. Following their official documentation, also this video https://www.youtube.com/watch?v=M3jpgZrB1uo, but it seems I am stuck at: try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) What I did: Manifest files created, info.plist configured, asset pack created and uploaded to appstoreconnect via transporter, successfully assigned to app and ready for internal testing. Added to my code: let assetPack = try await AssetPackManager.shared.assetPack(withID: "Tutorial") try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) let videoData = try AssetPackManager.shared.contents(at: "Videos/Introduction.m4v") but no luck at all.... is anywhere any demo project available to download to compare with my project?
3
0
451
Oct ’25
iOS 18.3.1 - runtime vs version number
Not sure if this is common with releases but I've been doing some CI work recently so it's the first time I've seen this myself, When I list the runtimes installed on my machine: xcrun simctl list runtimes I notice the iOS 18.3.1 release has the below info: == Runtimes == iOS 18.3 (18.3.1 - 22D8075) - com.apple.CoreSimulator.SimRuntime.iOS-18-3 Meanwhile the other runtimes are listed as: == Runtimes == iOS 17.5 (17.5 - 21F79) - com.apple.CoreSimulator.SimRuntime.iOS-17-5 iOS 18.4 (18.4 - 22E5216h) - com.apple.CoreSimulator.SimRuntime.iOS-18-4 watchOS 11.2 (11.2 - 22S99) - com.apple.CoreSimulator.SimRuntime.watchOS-11-2 visionOS 2.3 (2.3 - 22N895) - com.apple.CoreSimulator.SimRuntime.xrOS-2-3 (Apologies for the weird formatting above, using code blocks and quote markdown condenses things down to one line for some reason) This is causing some funkiness in my CI code which I've managed to workaround, but wondered if this was a common thing, specifically the mismatch between the iOS name and the runtime version. iOS 18.3 and com.apple.CoreSimulator.SimRuntime.iOS-18-3 vs 18.3.1 - 22D8075 where the .1 has been dropped for the runtime names?
1
0
151
Mar ’25
Associating file extension with my application
My application uses a text file with an extension of .dssfilelist. On Linux I would register the Mime type and associate it with the application in the .desktop file. <?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="text/dssfilelist"> <comment>DeepSkyStacker file-list file</comment> <glob pattern="*.dssfilelist" /> </mime-type> </mime-info> I believe that I need to add stuff to the Info.plist for my application, but I also understand that CFBundleTypeExtensions is deprecated. So please could you show me what I now need to add to the Info.plist file so that these files will be registered as "text/dssfilelist" type and associated with my application and to associate a .icns file with it?
19
0
568
May ’25
I need help with my TestFlight crash report. I have already symbolicated my crash report but I don't see an error.
My application always crashes at the same position when I open it on my iPad Air. It doesn't crash in debug mode which makes it very difficult for me to find the issue. My crash report from TestFlight: Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016d5f26f0 Exception Codes: 0x0000000000000001, 0x000000016d5f26f0 VM Region Info: 0x16d5f26f0 is not in any region. Bytes after previous region: 546219761 Bytes before following region: 399632 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL MALLOC_LARGE 14c000000-14cd08000 [ 13.0M] rw-/rwx SM=PRV ---> GAP OF 0x2094c000 BYTES Stack Guard 16d654000-16d658000 [ 16K] ---/rwx SM=NUL Termination Reason: SIGNAL 4 Illegal instruction: 4 Terminating Process: ProjectiOS [745] Triggered by Thread: 0 Thread 0 name: Thread 0 name: Thread 0 Crashed: 0 ProjectiOS 0x0000000107abf3b4 0x1026ac000 + 88159156 1 ProjectiOS 0x000000010e7d3be4 0x1026ac000 + 202537956 2 ProjectiOS 0x000000010e96c45c 0x1026ac000 + 204211292 3 ProjectiOS 0x000000010e96cadc 0x1026ac000 + 204212956 4 ProjectiOS 0x000000010e7d7ba4 0x1026ac000 + 202554276 5 ProjectiOS 0x00000001079cccc0 0x1026ac000 + 87166144 6 ProjectiOS 0x000000010945f33c 0x1026ac000 + 115028796 7 ProjectiOS 0x000000010945b648 0x1026ac000 + 115013192 8 ProjectiOS 0x0000000109458510 0x1026ac000 + 115000592 9 ProjectiOS 0x0000000107530430 0x1026ac000 + 82330672 10 ProjectiOS 0x0000000109459290 0x1026ac000 + 115004048 11 ProjectiOS 0x0000000109457584 0x1026ac000 + 114996612 12 ProjectiOS 0x00000001094b961c 0x1026ac000 + 115398172 13 ProjectiOS 0x00000001094bb8a0 0x1026ac000 + 115407008 14 ProjectiOS 0x00000001094c0340 0x1026ac000 + 115426112 15 ProjectiOS 0x000000010971e698 0x1026ac000 + 117909144 16 ProjectiOS 0x000000011104f7a4 0x1026ac000 + 244987812 17 QuartzCore 0x00000001879f4548 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 64 (CADisplay.mm:6671) 18 QuartzCore 0x00000001879d1c64 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 880 (CADisplay.mm:5794) 19 QuartzCore 0x00000001879e5394 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 360 (CADisplay.mm:4886) 20 UIKitCore 0x000000018c936afc _UIUpdateSequenceRunNext + 128 (_UIUpdateSequence.mm:189) 21 UIKitCore 0x000000018c935f8c schedulerStepScheduledMainSectionContinue + 60 (_UIUpdateScheduler.m:1197) 22 UpdateCycle 0x000000027364b560 UC::DriverCore::continueProcessing() + 84 (UCDriver.cc:288) 23 CoreFoundation 0x0000000186f8c4cc __CFMachPortPerform + 168 (CFMachPort.c:604) 24 CoreFoundation 0x0000000186fbc0b0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 60 (CFRunLoop.c:2045) 25 CoreFoundation 0x0000000186fbbfd8 __CFRunLoopDoSource1 + 508 (CFRunLoop.c:2184) 26 CoreFoundation 0x0000000186f93c1c __CFRunLoopRun + 2168 (CFRunLoop.c:3205) 27 CoreFoundation 0x0000000186f92a6c _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462) 28 GraphicsServices 0x000000022790d498 GSEventRunModal + 120 (GSEvent.c:2049) 29 UIKitCore 0x000000018c956ba4 -[UIApplication _run] + 792 (UIApplication.m:3902) 30 UIKitCore 0x000000018c8ffa78 UIApplicationMain + 336 (UIApplication.m:5577) 31 ProjectiOS 0x0000000110d93700 0x1026ac000 + 242120448 32 ProjectiOS 0x00000001109068f0 0x1026ac000 + 237349104 33 ProjectiOS 0x000000010f5885d4 0x1026ac000 + 216909268 34 ProjectiOS 0x000000010f588908 0x1026ac000 + 216910088 35 ProjectiOS 0x0000000107cf95b8 0x1026ac000 + 90494392 36 ProjectiOS 0x000000010e85dce8 0x1026ac000 + 203103464 37 ProjectiOS 0x0000000110fadbd4 0x1026ac000 + 244325332 38 ProjectiOS 0x0000000110f48e64 0x1026ac000 + 243912292 39 ProjectiOS 0x0000000110f50004 0x1026ac000 + 243941380 40 ProjectiOS 0x0000000110fb54f4 0x1026ac000 + 244356340 41 ProjectiOS 0x0000000110de715c 0x1026ac000 + 242463068 42 ProjectiOS 0x000000011102e55c 0x1026ac000 + 244852060 43 dyld 0x0000000183faae28 start + 7116 (dyldMain.cpp:1477) Then I symbolicated all the lines starting with "ProjectiOS" in my crash report but I cannot find the issue. Which lines in my crash report cause the crash? Lines 0-16: alcCaptureSamples (in ProjectiOS) + 202259184 alcCaptureSamples (in ProjectiOS) + 203932520 alcCaptureSamples (in ProjectiOS) + 203934184 alcCaptureSamples (in ProjectiOS) + 202275504 alcCaptureSamples (in ProjectiOS) + 86887372 alcCaptureSamples (in ProjectiOS) + 114750024 alcCaptureSamples (in ProjectiOS) + 114734420 alcCaptureSamples (in ProjectiOS) + 114721820 alcCaptureSamples (in ProjectiOS) + 82051900 alcCaptureSamples (in ProjectiOS) + 114725276 alcCaptureSamples (in ProjectiOS) + 114717840 alcCaptureSamples (in ProjectiOS) + 115119400 alcCaptureSamples (in ProjectiOS) + 115128236 alcCaptureSamples (in ProjectiOS) + 115147340 alcCaptureSamples (in ProjectiOS) + 117630372 BrotliEncoderHasMoreOutput (in ProjectiOS) + 2126968 Lines 31-42: alcCaptureSamples (in ProjectiOS) + 237070332 alcCaptureSamples (in ProjectiOS) + 216630496 alcCaptureSamples (in ProjectiOS) + 216631316 alcCaptureSamples (in ProjectiOS) + 90215620 alcCaptureSamples (in ProjectiOS) + 202824692 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1464488 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1051448 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1080536 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1495496 xamarin_get_original_working_directory_path (in ProjectiOS) + 4032 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1991216
3
0
385
Dec ’25
Is there a way for two users to make development builds on separate accounts for one app?
Tech stack: React Native + Expo. We are using two solo developer accounts (not a business or team account). Context: Friend and I set out to make an app together. Friend created app and set it up on Apple. We worked on it together. He controlled devops (builds and submission). Friend no longer can commit to development. Wants to transfer to me. I create apple developer account. After app transfer, my phone (deviceid) underwent a 14 day soft ban preventing builds. That has since been lifted. There seems to be something in place preventing me from making dev builds on the original dev bundleid. It says it's still owned by him despite the app transfer. Bottom line: what needs to happen so I can make dev builds? Nice to have: we can both make dev builds under the same bundleid
1
0
246
Dec ’25
If you have code to package as a framework which has a 3rd party dependency, what can you do given that iOS doesn't support umbrella frameworks
I've got a large and complex app which has several dependencies upon 3rd party libraries (installed as pods). The app is structured according to Model-View-Controller design and there is a requirement to implement the Model part as an .xcframework so it can be included and used in the original app along with a few new apps. However, Apple documentation states that umbrella frameworks are not supported (Technical Note TN2435). The Model code has several dependencies which would be totally unfeasible to replace or remove, for example it uses RealmSwift for database storage. Obviously it would be impossible to write one's own database storage scheme in place of using Realm. However, if my framework uses Realm as a dependency, then its now become an umbrella framework. So therefore not supported according to Apple documentation. So what are options/solutions?
11
0
746
Nov ’25
Assets.car not being built as part of the archiving and distribution process
I am working on a MAUI application. When I go to archive my build to then release it, my bundle is not including the Assets.car file that apple is seemingly expecting for handling the app icons, which is leading to issues trying to publish my app. The assets are in a AppIcon.appiconset folder in my project (under Platforms>iOS>Resources) with a proper Contents.json file also in there. They are setup as a BundledResource (also have tried ImageAssets for the build type but with the same issue occurring). I am using visual studio 2022 on Windows 11 paired with a Mac (Sequoia 15.5) and Xcode 16.4. I have even tried manually compiling the asset catalog from xcode16.4 and trying to use terminal commands to have actool create the Assets.car but that runs with no files created to the output destination as well as no errors. I believe there may be an issue with actools in my Xcode copy. I have tried uninstalling and reinstalling with no luck. Any suggestions or tips?
1
0
195
Jul ’25
Docker won't run on Sequoia 15.4
I'm on Mac Studio with Apple M1 Max and I recently upgrated to Sequoia 15.4. After that, Docker won't run anymore. I tried almost all proposed solutions on the web to make Docker to work with Sequoia 15.4 (e.g. workaround at GitHub), without success. Because of this, now I'm stuck in all of my development activities. For example, I cannot develop and deploy anymore my projects and applications. What can I make to solve that?
3
0
194
Apr ’25
React-Native app XCode build on IOS
First time user here. Trying to build my React-Native app on xcode. I keep getting "Could not build Module" and "missing package product" and tried many combination for my Podfile. I am on macbook pro M2, XCode version 16.2, building on iphone 16 v18.3.1. Pod version 1.16.2, react-native-cli:2.0.1, Here is my Podfile. I tried to assign modular_headers to individual Firebase packages but then I cant pod install. require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' use_modular_headers! platform :ios, '18.0' prepare_react_native_project! target 'plana' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], :fabric_enabled => false, :app_path => "#{Pod::Config.instance.installation_root}/.." ) post_install do |installer| react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false, ) end end
0
0
133
May ’25
Persistent Sandbox Denials When Building with Capacitor and CocoaPods in Xcode
I am a solo developer building a cross-platform voice assistant app using Capacitor (with HTML, JS) and Xcode for the iOS version. The app is called "Echo Eyes," and it already functions well as a Progressive Web App (PWA). However, the iOS build has been completely blocked due to persistent sandbox permission errors from macOS during the CocoaPods framework embedding phase. This issue has caused severe disruption to my project and personal well-being, and I am writing to formally request assistance in identifying a clear solution. I am not a beginner and have followed all known best practices, forums, and Apple guidance without success. What I’ve Built So Far: Fully working PWA version of the app (voice input, HTML/JS interface) Capacitor initialized with ID: com.echo.eyes.voice Capacitor iOS platform added with CocoaPods App runs fine until Xcode reaches: [CP] Embed Pods Frameworks The Exact Problem: Sandbox: bash(12319) deny(1) file-read-data /Users/Shared/projects/Echo_Mobile/ios/App/Pods/Target Support Files/Pods-App/Pods-App-frameworks.sh Command PhaseScriptExecution failed with a nonzero exit code Clarification: This is not an HTML/JS issue. The failure occurs in Xcode long before web assets are embedded into the bundle. The shell script /Pods-App-frameworks.sh cannot be read due to macOS sandbox restrictions. Everything I’ve Tried: Gave Xcode and Terminal Full Disk Access Ran: sudo xattr -rd com.apple.quarantine on the entire Pods directory Added /bin/bash and /bin/sh to Full Disk Access (after confirming the exact shell via $SHELL) Attempted to disable Gatekeeper via Terminal: sudo spctl --master-disable (confirmed not effective without GUI toggle) Tried relocating project to /Users/Shared/projects/ Cleaned build folder, removed derived data, reinstalled pods Debugged shell usage with: echo "▶️ Embedding under shell: $SHELL" in the [CP] Embed Pods Frameworks script Attempted to grant shell access to Documents Folder, Desktop, and more via Files &amp; Folders Current State: Despite following all known and recommended steps, Xcode continues to return the same sandbox error. The shell script that embeds the CocoaPod frameworks is denied permission to read its own contents by macOS. What I Am Asking For: Is this a known issue in current versions of macOS or Xcode regarding sandbox denial for shell execution inside Pods? Is there a recommended method to grant /bin/bash or /bin/sh permission to read and run these scripts under Xcode without compromising system security? Is moving the project outside /Users (e.g. to /Projects) the only real workaround? Are there official Apple workarounds or entitlements available for developers encountering this? Personal Note: This issue has caused significant emotional and physical distress. I’m building this app as a personal healing tool and companion. I’ve poured months of work into this and done everything I can to follow Apple’s development guidelines. I’m not asking for hand-holding — only a clear, respectful response confirming whether this is expected behavior and what can be done to resolve it. Thank you for your time and understanding.
0
0
185
Jun ’25
An Apple Library Primer
Apple’s library technology has a long and glorious history, dating all the way back to the origins of Unix. This does, however, mean that it can be a bit confusing to newcomers. This is my attempt to clarify some terminology. If you have any questions or comments about this, start a new thread and tag it with Linker so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" An Apple Library Primer Apple’s tools support two related concepts: Platform — This is the platform itself; macOS, iOS, iOS Simulator, and Mac Catalyst are all platforms. Architecture — This is a specific CPU architecture used by a platform. arm64 and x86_64 are both architectures. A given architecture might be used by multiple platforms. The most obvious example of this arm64, which is used by all of the platforms listed above. Code built for one platform will not work on another platform, even if both platforms use the same architecture. Code is usually packaged in either a Mach-O file or a static library. Mach-O is used for executables (MH_EXECUTE), dynamic libraries (MH_DYLIB), bundles (MH_BUNDLE), and object files (MH_OBJECT). These can have a variety of different extensions; the only constant is that .o is always used for a Mach-O containing an object file. Use otool and nm to examine a Mach-O file. Use vtool to quickly determine the platform for which it was built. Use size to get a summary of its size. Use dyld_info to get more details about a dynamic library. IMPORTANT All the tools mentioned here are documented in man pages. For information on how to access that documentation, see Reading UNIX Manual Pages. There’s also a Mach-O man page, with basic information about the file format. Many of these tools have old and new variants, using the -classic suffix or llvm- prefix, respectively. For example, there’s nm-classic and llvm-nm. If you run the original name for the tool, you’ll get either the old or new variant depending on the version of the currently selected tools. To explicitly request the old or new variants, use xcrun. The term Mach-O image refers to a Mach-O that can be loaded and executed without further processing. That includes executables, dynamic libraries, and bundles, but not object files. A dynamic library has the extension .dylib. You may also see this called a shared library. A framework is a bundle structure with the .framework extension that has both compile-time and run-time roles: At compile time, the framework combines the library’s headers and its stub library (stub libraries are explained below). At run time, the framework combines the library’s code, as a Mach-O dynamic library, and its associated resources. The exact structure of a framework varies by platform. For the details, see Placing Content in a Bundle. macOS supports both frameworks and standalone dynamic libraries. Other Apple platforms support frameworks but not standalone dynamic libraries. Historically these two roles were combined, that is, the framework included the headers, the dynamic library, and its resources. These days Apple ships different frameworks for each role. That is, the macOS SDK includes the compile-time framework and macOS itself includes the run-time one. Most third-party frameworks continue to combine these roles. A static library is an archive of one or more object files. It has the extension .a. Use ar, libtool, and ranlib to inspect and manipulate these archives. The static linker, or just the linker, runs at build time. It combines various inputs into a single output. Typically these inputs are object files, static libraries, dynamic libraries, and various configuration items. The output is most commonly a Mach-O image, although it’s also possible to output an object file. The linker may also output metadata, such as a link map (see Using a Link Map to Track Down a Symbol’s Origin). The linker has seen three major implementations: ld — This dates from the dawn of Mac OS X. ld64 — This was a rewrite started in the 2005 timeframe. Eventually it replaced ld completely. If you type ld, you get ld64. ld_prime — This was introduced with Xcode 15. This isn’t a separate tool. Rather, ld now supports the -ld_classic and -ld_new options to select a specific implementation. Note During the Xcode 15 beta cycle these options were -ld64 and -ld_prime. I continue to use those names because the definition of new changes over time (some of us still think of ld64 as the new linker ;–). The dynamic linker loads Mach-O images at runtime. Its path is /usr/lib/dyld, so it’s often referred to as dyld, dyld, or DYLD. Personally I pronounced that dee-lid, but some folks say di-lid and others say dee-why-el-dee. IMPORTANT Third-party executables must use the standard dynamic linker. Other Unix-y platforms support the notion of a statically linked executable, one that makes system calls directly. This is not supported on Apple platforms. Apple platforms provide binary compatibility via system dynamic libraries and frameworks, not at the system call level. Note Apple platforms have vestigial support for custom dynamic linkers (your executable tells the system which dynamic linker to use via the LC_LOAD_DYLINKER load command). This facility originated on macOS’s ancestor platform and has never been a supported option on any Apple platform. The dynamic linker has seen 4 major revisions. See WWDC 2017 Session 413 (referenced below) for a discussion of versions 1 through 3. Version 4 is basically a merging of versions 2 and 3. The dyld man page is chock-full of useful info, including a discussion of how it finds images at runtime. Every dynamic library has an install name, which is how the dynamic linker identifies the library. Historically that was the path where you installed the library. That’s still true for most system libraries, but nowadays a third-party library should use an rpath-relative install name. For more about this, see Dynamic Library Identification. Mach-O images are position independent, that is, they can be loaded at any location within the process’s address space. Historically, Mach-O supported the concept of position-dependent images, ones that could only be loaded at a specific address. While it may still be possible to create such an image, it’s no longer a good life choice. Mach-O images have a default load address, also known as the base address. For modern position-independent images this is 0 for library images and 4 GiB for executables (leaving the bottom 32 bits of the process’s address space unmapped). When the dynamic linker loads an image, it chooses an address for the image and then rebases the image to that address. If you take that address and subtract the image’s load address, you get a value known as the slide. Xcode 15 introduced the concept of a mergeable library. This a dynamic library with extra metadata that allows the linker to embed it into the output Mach-O image, much like a static library. Mergeable libraries have many benefits. For all the backstory, see WWDC 2023 Session 10268 Meet mergeable libraries. For instructions on how to set this up, see Configuring your project to use mergeable libraries. If you put a mergeable library into a framework structure you get a mergeable framework. Xcode 15 also introduced the concept of a static framework. This is a framework structure where the framework’s dynamic library is replaced by a static library. Note It’s not clear to me whether this offers any benefit over creating a mergeable framework. Earlier versions of Xcode did not have proper static framework support. That didn’t stop folks trying to use them, which caused all sorts of weird build problems. A universal binary is a file that contains multiple architectures for the same platform. Universal binaries always use the universal binary format. Use the file command to learn what architectures are within a universal binary. Use the lipo command to manipulate universal binaries. A universal binary’s architectures are either all in Mach-O format or all in the static library archive format. The latter is called a universal static library. A universal binary has the same extension as its non-universal equivalent. That means a .a file might be a static library or a universal static library. Most tools work on a single architecture within a universal binary. They default to the architecture of the current machine. To override this, pass the architecture in using a command-line option, typically -arch or --arch. An XCFramework is a single document package that includes libraries for any combination of platforms and architectures. It has the extension .xcframework. An XCFramework holds either a framework, a dynamic library, or a static library. All the elements must be the same type. Use xcodebuild to create an XCFramework. For specific instructions, see Xcode Help > Distribute binary frameworks > Create an XCFramework. Historically there was no need to code sign libraries in SDKs. If you shipped an SDK to another developer, they were responsible for re-signing all the code as part of their distribution process. Xcode 15 changes this. You should sign your SDK so that a developer using it can verify this dependency. For more details, see WWDC 2023 Session 10061 Verify app dependencies with digital signatures and Verifying the origin of your XCFrameworks. A stub library is a compact description of the contents of a dynamic library. It has the extension .tbd, which stands for text-based description (TBD). Apple’s SDKs include stub libraries to minimise their size; for the backstory, read this post. Use the tapi tool to create and manipulate stub libraries. In this context TAPI stands for a text-based API, an alternative name for TBD. Oh, and on the subject of tapi, I’d be remiss if I didn’t mention tapi-analyze! Stub libraries currently use YAML format, a fact that’s relevant when you try to interpret linker errors. If you’re curious about the format, read the tapi-tbdv4 man page. There’s also a JSON variant documented in the tapi-tbdv5 man page. Note Back in the day stub libraries used to be Mach-O files with all the code removed (MH_DYLIB_STUB). This format has long been deprecated in favour of TBD. Historically, the system maintained a dynamic linker shared cache, built at runtime from its working set of dynamic libraries. In macOS 11 and later this cache is included in the OS itself. Libraries in the cache are no longer present in their original locations on disk: % ls -lh /usr/lib/libSystem.B.dylib ls: /usr/lib/libSystem.B.dylib: No such file or directory Apple APIs, most notably dlopen, understand this and do the right thing if you supply the path of a library that moved into the cache. That’s true for some, but not all, command-line tools, for example: % dyld_info -exports /usr/lib/libSystem.B.dylib /usr/lib/libSystem.B.dylib [arm64e]: -exports: offset symbol … 0x5B827FE8 _mach_init_routine % nm /usr/lib/libSystem.B.dylib …/nm: error: /usr/lib/libSystem.B.dylib: No such file or directory When the linker creates a Mach-O image, it adds a bunch of helpful information to that image, including: The target platform The deployment target, that is, the minimum supported version of that platform Information about the tools used to build the image, most notably, the SDK version A build UUID For more information about the build UUID, see TN3178 Checking for and resolving build UUID problems. To dump the other information, run vtool. In some cases the OS uses the SDK version of the main executable to determine whether to enable new behaviour or retain old behaviour for compatibility purposes. You might see this referred to as compiled against SDK X. I typically refer to this as a linked-on-or-later check. Apple tools support the concept of autolinking. When your code uses a symbol from a module, the compiler inserts a reference (using the LC_LINKER_OPTION load command) to that module into the resulting object file (.o). When you link with that object file, the linker adds the referenced module to the list of modules that it searches when resolving symbols. Autolinking is obviously helpful but it can also cause problems, especially with cross-platform code. For information on how to enable and disable it, see the Build settings reference. Mach-O uses a two-level namespace. When a Mach-O image imports a symbol, it references the symbol name and the library where it expects to find that symbol. This improves both performance and reliability but it precludes certain techniques that might work on other platforms. For example, you can’t define a function called printf and expect it to ‘see’ calls from other dynamic libraries because those libraries import the version of printf from libSystem. To help folks who rely on techniques like this, macOS supports a flat namespace compatibility mode. This has numerous sharp edges — for an example, see the posts on this thread — and it’s best to avoid it where you can. If you’re enabling the flat namespace as part of a developer tool, search the ’net for dyld interpose to learn about an alternative technique. WARNING Dynamic linker interposing is not documented as API. While it’s a useful technique for developer tools, do not use it in products you ship to end users. Apple platforms use DWARF. When you compile a file, the compiler puts the debug info into the resulting object file. When you link a set of object files into a executable, dynamic library, or bundle for distribution, the linker does not include this debug info. Rather, debug info is stored in a separate debug symbols document package. This has the extension .dSYM and is created using dsymutil. Use symbols to learn about the symbols in a file. Use dwarfdump to get detailed information about DWARF debug info. Use atos to map an address to its corresponding symbol name. Different languages use different name mangling schemes: C, and all later languages, add a leading underscore (_) to distinguish their symbols from assembly language symbols. C++ uses a complex name mangling scheme. Use the c++filt tool to undo this mangling. Likewise, for Swift. Use swift demangle to undo this mangling. For a bunch more info about symbols in Mach-O, see Understanding Mach-O Symbols. This includes a discussion of weak references and weak definition. If your code is referencing a symbol unexpectedly, see Determining Why a Symbol is Referenced. To remove symbols from a Mach-O file, run strip. To hide symbols, run nmedit. It’s common for linkers to divide an object file into sections. You might find data in the data section and code in the text section (text is an old Unix term for code). Mach-O uses segments and sections. For example, there is a text segment (__TEXT) and within that various sections for code (__TEXT > __text), constant C strings (__TEXT > __cstring), and so on. Over the years there have been some really good talks about linking and libraries at WWDC, including: WWDC 2023 Session 10268 Meet mergeable libraries WWDC 2022 Session 110362 Link fast: Improve build and launch times WWDC 2022 Session 110370 Debug Swift debugging with LLDB WWDC 2021 Session 10211 Symbolication: Beyond the basics WWDC 2019 Session 416 Binary Frameworks in Swift — Despite the name, this covers XCFrameworks in depth. WWDC 2018 Session 415 Behind the Scenes of the Xcode Build Process WWDC 2017 Session 413 App Startup Time: Past, Present, and Future WWDC 2016 Session 406 Optimizing App Startup Time Note The older talks are no longer available from Apple, but you may be able to find transcripts out there on the ’net. Historically Apple published a document, Mac OS X ABI Mach-O File Format Reference, or some variant thereof, that acted as the definitive reference to the Mach-O file format. This document is no longer available from Apple. If you’re doing serious work with Mach-O, I recommend that you find an old copy. It’s definitely out of date, but there’s no better place to get a high-level introduction to the concepts. The Mach-O Wikipedia page has a link to an archived version of the document. For the most up-to-date information about Mach-O, see the declarations and doc comments in <mach-o/loader.h>. Revision History 2025-08-04 Added a link to Determining Why a Symbol is Referenced. 2025-06-29 Added information about autolinking. 2025-05-21 Added a note about the legacy Mach-O stub library format (MH_DYLIB_STUB). 2025-04-30 Added a specific reference to the man pages for the TBD format. 2025-03-01 Added a link to Understanding Mach-O Symbols. Added a link to TN3178 Checking for and resolving build UUID problems. Added a summary of the information available via vtool. Discussed linked-on-or-later checks. Explained how Mach-O uses segments and sections. Explained the old (-classic) and new (llvm-) tool variants. Referenced the Mach-O man page. Added basic info about the strip and nmedit tools. 2025-02-17 Expanded the discussion of dynamic library identification. 2024-10-07 Added some basic information about the dynamic linker shared cache. 2024-07-26 Clarified the description of the expected load address for Mach-O images. 2024-07-23 Added a discussion of position-independent images and the image slide. 2024-05-08 Added links to the demangling tools. 2024-04-30 Clarified the requirement to use the standard dynamic linker. 2024-03-02 Updated the discussion of static frameworks to account for Xcode 15 changes. Removed the link to WWDC 2018 Session 415 because it no longer works )-: 2024-03-01 Added the WWDC 2023 session to the list of sessions to make it easier to find. Added a reference to Using a Link Map to Track Down a Symbol’s Origin. Made other minor editorial changes. 2023-09-20 Added a link to Dynamic Library Identification. Updated the names for the static linker implementations (-ld_prime is no more!). Removed the beta epithet from Xcode 15. 2023-06-13 Defined the term Mach-O image. Added sections for both the static and dynamic linkers. Described the two big new features in Xcode 15: mergeable libraries and dependency verification. 2023-06-01 Add a reference to tapi-analyze. 2023-05-29 Added a discussion of the two-level namespace. 2023-04-27 Added a mention of the size tool. 2023-01-23 Explained the compile-time and run-time roles of a framework. Made other minor editorial changes. 2022-11-17 Added an explanation of TAPI. 2022-10-12 Added links to Mach-O documentation. 2022-09-29 Added info about .dSYM files. Added a few more links to WWDC sessions. 2022-09-21 First posted.
0
0
15k
Aug ’25
"A software update is required" message is shown when running beta software
I'm running the latest iOS 26 beta 5 on my iPad and iPhone. Whenever I run these betas, I always get the message below telling me an update is available (whenever I plug in my devices). I'm assuming this is because the update check is detecting that I have something other than the latest production release. Obviously, it makes no sense to ask me to update to a prod build when I'm running the dev beta. Is there a way to turn this message off? Or maybe Apple could handle this situation better? Or maybe it's just a bug and I'm the only one getting this message?
1
0
82
Aug ’25
macOS 15.6: Opened package is not the same at install time
I've created an installation package and it is failing to install on macOS 15.6. The package is, I believe, properly notarized, since it will install correctly on other macOS versions, including 15.5 The only clue I have is the output from installer: installer[8015] : Opened package is not the same at install time installer[8015] : Unable to use PK session due to incompatible packages. Terminating. installer[8015] : Install failed: The Installer could not install the software because there was no software found to install. The installer consists of a a single "component" package, and the outer "product" package. The component package is present, and I can successfully run installer manually to install it, so I don't think the component package is corrupt. Has anyone else encountered this? Are there any tools available to help me diagnose the issue? The logging is not helpful.
2
0
216
Aug ’25
How to Obtain License File for Main Camera Access Entitlement in visionOS (Email Was Deactivated During Approval)
Hi everyone, I'm developing a visionOS application using Unity with an enterprise developer account. I applied for the Main Camera Access entitlement, but at the time of submission, the email address associated with my Apple ID was deactivated, so I couldn’t receive any email communication from Apple. Later, I updated the email address for my Apple ID. Now, in the Apple Developer portal under Identifiers, I can see that my app has been granted Main Camera Access, and I can also add the corresponding capability in Xcode. However, according to Apple’s documentation(https://developer.apple.com/documentation/visionos/building-spatial-experiences-for-business-apps-with-enterprise-apis): “To use entitlements, you need to include both the entitlement file and a corresponding license file in your app. After Apple approves your app for one or more entitlements, you receive a license file, along with additional instructions.” I never received this license file, possibly due to the deactivated email. I don't know where to find it or how to retrieve it now. What exactly is this license file? If it was originally sent to an unreachable email, how can I request it again or get it resent? Where in the Apple Developer portal (or elsewhere) can I access or download this file? Any help or guidance would be greatly appreciated! Thanks in advance.
2
0
123
Aug ’25
Are watchdog timeout terminations a crash or not?
If an iOS app gets terminated by watchdog due to, for example, hanging the main thread, is that considered to be a crash or something different. I'm asking because, according to google and AI, Crashlytics can detect and report these,but in my experience it does not. If I deliberately cause a watchdog termination by for example sleeping on the main thread for a long time then these never appear in Crashlytics. I know Apple folks here don't comment on non Apple software, so I'm not asking about Crashlytics, just wondering and interested about watchdog timeout terminations and how they differ from a "regular" crash.
1
0
156
Mar ’25
Assistance Needed with Enabling Speech Recognition Entitlement for iOS App
Subject: Assistance Needed with Enabling Speech Recognition Entitlement for iOS App Hi everyone, I’m seeking guidance regarding the Speech Recognition entitlement for my iOS app using Capacitor. Our App and we submitted a request to Apple Developer Support four days ago, but have not yet received a response. 🧩 Summary of the issue: Our app uses the Capacitor speech recognition plugin (@capacitor-community/speech-recognition) to listen for native voice input on iOS. We have added both of the required keys in Info.plist: NSSpeechRecognitionUsageDescription NSMicrophoneUsageDescription We previously had a duplicate microphone key, which caused the system to silently skip the permission request. After removing the duplicate, we did briefly see the microphone permission prompt appear. However, in our most recent builds, the app launches without any prompts, even on a fresh install. The plugin reports: available = true permissionStatus = granted Despite this, no speech input is ever received, and the listener returns nothing. We believe the app is functioning correctly at a code level (plugin loads, no errors, correct Info.plist), but suspect the missing Speech Recognition entitlement is blocking actual access to the speech system. 🔎 What we need help with: How can we confirm whether the Speech Recognition entitlement is enabled for our App ID? If it’s not enabled, is there a way to escalate or re-submit the request? Our app is currently stuck until this entitlement is granted. Thank you for your time and any guidance you can offer!
6
0
315
Jun ’25
Unexpected app version in logs — does MARKETING_VERSION change dynamically?
Hello, I've encountered unexpected behavior related to version information in our app logs, and I'd like to ask for some advice. We reviewed logs collected from a user running our app (currently available on the App Store). The logs are designed to include both the build number and the app version. Based on the build number in the logs, we believe the installed app version on the user's device is 1.0.3. However, the app version recorded in the logs is 1.1.5, which is the latest version currently available on the App Store. In our project, we set the app version using the MARKETING_VERSION environment variable. This value is configured via XcodeGen, and we define it in a YAML file. Under normal circumstances, the value defined in the YAML file (MARKETING_VERSION = 1.0.3) should be embedded in the app and reflected in the logs. But in this case, the version from the current App Store release (1.1.5) appears instead, which was unexpected. We'd like to know what might cause this behavior, and if there are any known factors that could lead to this. Also, is it possible that MARKETING_VERSION might somehow dynamically reflect the version currently available on the App Store? YAML: info.plist:
0
0
90
Jun ’25
Apple-hosted managed assets
Hi, anyone managed to make this work? https://developer.apple.com/documentation/backgroundassets Trying for past few days and can't make it work. Following their official documentation, also this video https://www.youtube.com/watch?v=M3jpgZrB1uo, but it seems I am stuck at: try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) What I did: Manifest files created, info.plist configured, asset pack created and uploaded to appstoreconnect via transporter, successfully assigned to app and ready for internal testing. Added to my code: let assetPack = try await AssetPackManager.shared.assetPack(withID: "Tutorial") try await AssetPackManager.shared.ensureLocalAvailability(of: assetPack) let videoData = try AssetPackManager.shared.contents(at: "Videos/Introduction.m4v") but no luck at all.... is anywhere any demo project available to download to compare with my project?
Replies
3
Boosts
0
Views
451
Activity
Oct ’25
Setting LSApplicationCategoryType
Is this a valid thing to include in the Info.plist file? If so is a category of public.app-category.astronomyvalid? I couldn't find that, but the categories I did find seemed very limited.
Replies
2
Boosts
0
Views
147
Activity
May ’25
iOS 18.3.1 - runtime vs version number
Not sure if this is common with releases but I've been doing some CI work recently so it's the first time I've seen this myself, When I list the runtimes installed on my machine: xcrun simctl list runtimes I notice the iOS 18.3.1 release has the below info: == Runtimes == iOS 18.3 (18.3.1 - 22D8075) - com.apple.CoreSimulator.SimRuntime.iOS-18-3 Meanwhile the other runtimes are listed as: == Runtimes == iOS 17.5 (17.5 - 21F79) - com.apple.CoreSimulator.SimRuntime.iOS-17-5 iOS 18.4 (18.4 - 22E5216h) - com.apple.CoreSimulator.SimRuntime.iOS-18-4 watchOS 11.2 (11.2 - 22S99) - com.apple.CoreSimulator.SimRuntime.watchOS-11-2 visionOS 2.3 (2.3 - 22N895) - com.apple.CoreSimulator.SimRuntime.xrOS-2-3 (Apologies for the weird formatting above, using code blocks and quote markdown condenses things down to one line for some reason) This is causing some funkiness in my CI code which I've managed to workaround, but wondered if this was a common thing, specifically the mismatch between the iOS name and the runtime version. iOS 18.3 and com.apple.CoreSimulator.SimRuntime.iOS-18-3 vs 18.3.1 - 22D8075 where the .1 has been dropped for the runtime names?
Replies
1
Boosts
0
Views
151
Activity
Mar ’25
Programatically Get macOS Version From Mac Catalyst Version
How can I get the macOS version from the Mac Catalyst version? We're building Info.plist files ourselves but we need a way to programatically (using shell scripts) derive the LSMinimumSystemVersion key needed from the iOS deployment target.
Replies
2
Boosts
0
Views
140
Activity
Jun ’25
Associating file extension with my application
My application uses a text file with an extension of .dssfilelist. On Linux I would register the Mime type and associate it with the application in the .desktop file. <?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="text/dssfilelist"> <comment>DeepSkyStacker file-list file</comment> <glob pattern="*.dssfilelist" /> </mime-type> </mime-info> I believe that I need to add stuff to the Info.plist for my application, but I also understand that CFBundleTypeExtensions is deprecated. So please could you show me what I now need to add to the Info.plist file so that these files will be registered as "text/dssfilelist" type and associated with my application and to associate a .icns file with it?
Replies
19
Boosts
0
Views
568
Activity
May ’25
I need help with my TestFlight crash report. I have already symbolicated my crash report but I don't see an error.
My application always crashes at the same position when I open it on my iPad Air. It doesn't crash in debug mode which makes it very difficult for me to find the issue. My crash report from TestFlight: Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016d5f26f0 Exception Codes: 0x0000000000000001, 0x000000016d5f26f0 VM Region Info: 0x16d5f26f0 is not in any region. Bytes after previous region: 546219761 Bytes before following region: 399632 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL MALLOC_LARGE 14c000000-14cd08000 [ 13.0M] rw-/rwx SM=PRV ---> GAP OF 0x2094c000 BYTES Stack Guard 16d654000-16d658000 [ 16K] ---/rwx SM=NUL Termination Reason: SIGNAL 4 Illegal instruction: 4 Terminating Process: ProjectiOS [745] Triggered by Thread: 0 Thread 0 name: Thread 0 name: Thread 0 Crashed: 0 ProjectiOS 0x0000000107abf3b4 0x1026ac000 + 88159156 1 ProjectiOS 0x000000010e7d3be4 0x1026ac000 + 202537956 2 ProjectiOS 0x000000010e96c45c 0x1026ac000 + 204211292 3 ProjectiOS 0x000000010e96cadc 0x1026ac000 + 204212956 4 ProjectiOS 0x000000010e7d7ba4 0x1026ac000 + 202554276 5 ProjectiOS 0x00000001079cccc0 0x1026ac000 + 87166144 6 ProjectiOS 0x000000010945f33c 0x1026ac000 + 115028796 7 ProjectiOS 0x000000010945b648 0x1026ac000 + 115013192 8 ProjectiOS 0x0000000109458510 0x1026ac000 + 115000592 9 ProjectiOS 0x0000000107530430 0x1026ac000 + 82330672 10 ProjectiOS 0x0000000109459290 0x1026ac000 + 115004048 11 ProjectiOS 0x0000000109457584 0x1026ac000 + 114996612 12 ProjectiOS 0x00000001094b961c 0x1026ac000 + 115398172 13 ProjectiOS 0x00000001094bb8a0 0x1026ac000 + 115407008 14 ProjectiOS 0x00000001094c0340 0x1026ac000 + 115426112 15 ProjectiOS 0x000000010971e698 0x1026ac000 + 117909144 16 ProjectiOS 0x000000011104f7a4 0x1026ac000 + 244987812 17 QuartzCore 0x00000001879f4548 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 64 (CADisplay.mm:6671) 18 QuartzCore 0x00000001879d1c64 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 880 (CADisplay.mm:5794) 19 QuartzCore 0x00000001879e5394 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 360 (CADisplay.mm:4886) 20 UIKitCore 0x000000018c936afc _UIUpdateSequenceRunNext + 128 (_UIUpdateSequence.mm:189) 21 UIKitCore 0x000000018c935f8c schedulerStepScheduledMainSectionContinue + 60 (_UIUpdateScheduler.m:1197) 22 UpdateCycle 0x000000027364b560 UC::DriverCore::continueProcessing() + 84 (UCDriver.cc:288) 23 CoreFoundation 0x0000000186f8c4cc __CFMachPortPerform + 168 (CFMachPort.c:604) 24 CoreFoundation 0x0000000186fbc0b0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 60 (CFRunLoop.c:2045) 25 CoreFoundation 0x0000000186fbbfd8 __CFRunLoopDoSource1 + 508 (CFRunLoop.c:2184) 26 CoreFoundation 0x0000000186f93c1c __CFRunLoopRun + 2168 (CFRunLoop.c:3205) 27 CoreFoundation 0x0000000186f92a6c _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462) 28 GraphicsServices 0x000000022790d498 GSEventRunModal + 120 (GSEvent.c:2049) 29 UIKitCore 0x000000018c956ba4 -[UIApplication _run] + 792 (UIApplication.m:3902) 30 UIKitCore 0x000000018c8ffa78 UIApplicationMain + 336 (UIApplication.m:5577) 31 ProjectiOS 0x0000000110d93700 0x1026ac000 + 242120448 32 ProjectiOS 0x00000001109068f0 0x1026ac000 + 237349104 33 ProjectiOS 0x000000010f5885d4 0x1026ac000 + 216909268 34 ProjectiOS 0x000000010f588908 0x1026ac000 + 216910088 35 ProjectiOS 0x0000000107cf95b8 0x1026ac000 + 90494392 36 ProjectiOS 0x000000010e85dce8 0x1026ac000 + 203103464 37 ProjectiOS 0x0000000110fadbd4 0x1026ac000 + 244325332 38 ProjectiOS 0x0000000110f48e64 0x1026ac000 + 243912292 39 ProjectiOS 0x0000000110f50004 0x1026ac000 + 243941380 40 ProjectiOS 0x0000000110fb54f4 0x1026ac000 + 244356340 41 ProjectiOS 0x0000000110de715c 0x1026ac000 + 242463068 42 ProjectiOS 0x000000011102e55c 0x1026ac000 + 244852060 43 dyld 0x0000000183faae28 start + 7116 (dyldMain.cpp:1477) Then I symbolicated all the lines starting with "ProjectiOS" in my crash report but I cannot find the issue. Which lines in my crash report cause the crash? Lines 0-16: alcCaptureSamples (in ProjectiOS) + 202259184 alcCaptureSamples (in ProjectiOS) + 203932520 alcCaptureSamples (in ProjectiOS) + 203934184 alcCaptureSamples (in ProjectiOS) + 202275504 alcCaptureSamples (in ProjectiOS) + 86887372 alcCaptureSamples (in ProjectiOS) + 114750024 alcCaptureSamples (in ProjectiOS) + 114734420 alcCaptureSamples (in ProjectiOS) + 114721820 alcCaptureSamples (in ProjectiOS) + 82051900 alcCaptureSamples (in ProjectiOS) + 114725276 alcCaptureSamples (in ProjectiOS) + 114717840 alcCaptureSamples (in ProjectiOS) + 115119400 alcCaptureSamples (in ProjectiOS) + 115128236 alcCaptureSamples (in ProjectiOS) + 115147340 alcCaptureSamples (in ProjectiOS) + 117630372 BrotliEncoderHasMoreOutput (in ProjectiOS) + 2126968 Lines 31-42: alcCaptureSamples (in ProjectiOS) + 237070332 alcCaptureSamples (in ProjectiOS) + 216630496 alcCaptureSamples (in ProjectiOS) + 216631316 alcCaptureSamples (in ProjectiOS) + 90215620 alcCaptureSamples (in ProjectiOS) + 202824692 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1464488 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1051448 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1080536 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1495496 xamarin_get_original_working_directory_path (in ProjectiOS) + 4032 BrotliEncoderHasMoreOutput (in ProjectiOS) + 1991216
Replies
3
Boosts
0
Views
385
Activity
Dec ’25
Is there a way for two users to make development builds on separate accounts for one app?
Tech stack: React Native + Expo. We are using two solo developer accounts (not a business or team account). Context: Friend and I set out to make an app together. Friend created app and set it up on Apple. We worked on it together. He controlled devops (builds and submission). Friend no longer can commit to development. Wants to transfer to me. I create apple developer account. After app transfer, my phone (deviceid) underwent a 14 day soft ban preventing builds. That has since been lifted. There seems to be something in place preventing me from making dev builds on the original dev bundleid. It says it's still owned by him despite the app transfer. Bottom line: what needs to happen so I can make dev builds? Nice to have: we can both make dev builds under the same bundleid
Replies
1
Boosts
0
Views
246
Activity
Dec ’25
If you have code to package as a framework which has a 3rd party dependency, what can you do given that iOS doesn't support umbrella frameworks
I've got a large and complex app which has several dependencies upon 3rd party libraries (installed as pods). The app is structured according to Model-View-Controller design and there is a requirement to implement the Model part as an .xcframework so it can be included and used in the original app along with a few new apps. However, Apple documentation states that umbrella frameworks are not supported (Technical Note TN2435). The Model code has several dependencies which would be totally unfeasible to replace or remove, for example it uses RealmSwift for database storage. Obviously it would be impossible to write one's own database storage scheme in place of using Realm. However, if my framework uses Realm as a dependency, then its now become an umbrella framework. So therefore not supported according to Apple documentation. So what are options/solutions?
Replies
11
Boosts
0
Views
746
Activity
Nov ’25
Is it possible to remove some frameworks from the iOS SDK to make them smaller?
For example, what if I wanted to remove CoreData from the SDK when I install to reduce the SDK’s size?
Replies
6
Boosts
0
Views
145
Activity
Mar ’25
Assets.car not being built as part of the archiving and distribution process
I am working on a MAUI application. When I go to archive my build to then release it, my bundle is not including the Assets.car file that apple is seemingly expecting for handling the app icons, which is leading to issues trying to publish my app. The assets are in a AppIcon.appiconset folder in my project (under Platforms>iOS>Resources) with a proper Contents.json file also in there. They are setup as a BundledResource (also have tried ImageAssets for the build type but with the same issue occurring). I am using visual studio 2022 on Windows 11 paired with a Mac (Sequoia 15.5) and Xcode 16.4. I have even tried manually compiling the asset catalog from xcode16.4 and trying to use terminal commands to have actool create the Assets.car but that runs with no files created to the output destination as well as no errors. I believe there may be an issue with actools in my Xcode copy. I have tried uninstalling and reinstalling with no luck. Any suggestions or tips?
Replies
1
Boosts
0
Views
195
Activity
Jul ’25
Docker won't run on Sequoia 15.4
I'm on Mac Studio with Apple M1 Max and I recently upgrated to Sequoia 15.4. After that, Docker won't run anymore. I tried almost all proposed solutions on the web to make Docker to work with Sequoia 15.4 (e.g. workaround at GitHub), without success. Because of this, now I'm stuck in all of my development activities. For example, I cannot develop and deploy anymore my projects and applications. What can I make to solve that?
Replies
3
Boosts
0
Views
194
Activity
Apr ’25
React-Native app XCode build on IOS
First time user here. Trying to build my React-Native app on xcode. I keep getting "Could not build Module" and "missing package product" and tried many combination for my Podfile. I am on macbook pro M2, XCode version 16.2, building on iphone 16 v18.3.1. Pod version 1.16.2, react-native-cli:2.0.1, Here is my Podfile. I tried to assign modular_headers to individual Firebase packages but then I cant pod install. require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' use_modular_headers! platform :ios, '18.0' prepare_react_native_project! target 'plana' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], :fabric_enabled => false, :app_path => "#{Pod::Config.instance.installation_root}/.." ) post_install do |installer| react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false, ) end end
Replies
0
Boosts
0
Views
133
Activity
May ’25
Persistent Sandbox Denials When Building with Capacitor and CocoaPods in Xcode
I am a solo developer building a cross-platform voice assistant app using Capacitor (with HTML, JS) and Xcode for the iOS version. The app is called "Echo Eyes," and it already functions well as a Progressive Web App (PWA). However, the iOS build has been completely blocked due to persistent sandbox permission errors from macOS during the CocoaPods framework embedding phase. This issue has caused severe disruption to my project and personal well-being, and I am writing to formally request assistance in identifying a clear solution. I am not a beginner and have followed all known best practices, forums, and Apple guidance without success. What I’ve Built So Far: Fully working PWA version of the app (voice input, HTML/JS interface) Capacitor initialized with ID: com.echo.eyes.voice Capacitor iOS platform added with CocoaPods App runs fine until Xcode reaches: [CP] Embed Pods Frameworks The Exact Problem: Sandbox: bash(12319) deny(1) file-read-data /Users/Shared/projects/Echo_Mobile/ios/App/Pods/Target Support Files/Pods-App/Pods-App-frameworks.sh Command PhaseScriptExecution failed with a nonzero exit code Clarification: This is not an HTML/JS issue. The failure occurs in Xcode long before web assets are embedded into the bundle. The shell script /Pods-App-frameworks.sh cannot be read due to macOS sandbox restrictions. Everything I’ve Tried: Gave Xcode and Terminal Full Disk Access Ran: sudo xattr -rd com.apple.quarantine on the entire Pods directory Added /bin/bash and /bin/sh to Full Disk Access (after confirming the exact shell via $SHELL) Attempted to disable Gatekeeper via Terminal: sudo spctl --master-disable (confirmed not effective without GUI toggle) Tried relocating project to /Users/Shared/projects/ Cleaned build folder, removed derived data, reinstalled pods Debugged shell usage with: echo "▶️ Embedding under shell: $SHELL" in the [CP] Embed Pods Frameworks script Attempted to grant shell access to Documents Folder, Desktop, and more via Files &amp; Folders Current State: Despite following all known and recommended steps, Xcode continues to return the same sandbox error. The shell script that embeds the CocoaPod frameworks is denied permission to read its own contents by macOS. What I Am Asking For: Is this a known issue in current versions of macOS or Xcode regarding sandbox denial for shell execution inside Pods? Is there a recommended method to grant /bin/bash or /bin/sh permission to read and run these scripts under Xcode without compromising system security? Is moving the project outside /Users (e.g. to /Projects) the only real workaround? Are there official Apple workarounds or entitlements available for developers encountering this? Personal Note: This issue has caused significant emotional and physical distress. I’m building this app as a personal healing tool and companion. I’ve poured months of work into this and done everything I can to follow Apple’s development guidelines. I’m not asking for hand-holding — only a clear, respectful response confirming whether this is expected behavior and what can be done to resolve it. Thank you for your time and understanding.
Replies
0
Boosts
0
Views
185
Activity
Jun ’25
An Apple Library Primer
Apple’s library technology has a long and glorious history, dating all the way back to the origins of Unix. This does, however, mean that it can be a bit confusing to newcomers. This is my attempt to clarify some terminology. If you have any questions or comments about this, start a new thread and tag it with Linker so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" An Apple Library Primer Apple’s tools support two related concepts: Platform — This is the platform itself; macOS, iOS, iOS Simulator, and Mac Catalyst are all platforms. Architecture — This is a specific CPU architecture used by a platform. arm64 and x86_64 are both architectures. A given architecture might be used by multiple platforms. The most obvious example of this arm64, which is used by all of the platforms listed above. Code built for one platform will not work on another platform, even if both platforms use the same architecture. Code is usually packaged in either a Mach-O file or a static library. Mach-O is used for executables (MH_EXECUTE), dynamic libraries (MH_DYLIB), bundles (MH_BUNDLE), and object files (MH_OBJECT). These can have a variety of different extensions; the only constant is that .o is always used for a Mach-O containing an object file. Use otool and nm to examine a Mach-O file. Use vtool to quickly determine the platform for which it was built. Use size to get a summary of its size. Use dyld_info to get more details about a dynamic library. IMPORTANT All the tools mentioned here are documented in man pages. For information on how to access that documentation, see Reading UNIX Manual Pages. There’s also a Mach-O man page, with basic information about the file format. Many of these tools have old and new variants, using the -classic suffix or llvm- prefix, respectively. For example, there’s nm-classic and llvm-nm. If you run the original name for the tool, you’ll get either the old or new variant depending on the version of the currently selected tools. To explicitly request the old or new variants, use xcrun. The term Mach-O image refers to a Mach-O that can be loaded and executed without further processing. That includes executables, dynamic libraries, and bundles, but not object files. A dynamic library has the extension .dylib. You may also see this called a shared library. A framework is a bundle structure with the .framework extension that has both compile-time and run-time roles: At compile time, the framework combines the library’s headers and its stub library (stub libraries are explained below). At run time, the framework combines the library’s code, as a Mach-O dynamic library, and its associated resources. The exact structure of a framework varies by platform. For the details, see Placing Content in a Bundle. macOS supports both frameworks and standalone dynamic libraries. Other Apple platforms support frameworks but not standalone dynamic libraries. Historically these two roles were combined, that is, the framework included the headers, the dynamic library, and its resources. These days Apple ships different frameworks for each role. That is, the macOS SDK includes the compile-time framework and macOS itself includes the run-time one. Most third-party frameworks continue to combine these roles. A static library is an archive of one or more object files. It has the extension .a. Use ar, libtool, and ranlib to inspect and manipulate these archives. The static linker, or just the linker, runs at build time. It combines various inputs into a single output. Typically these inputs are object files, static libraries, dynamic libraries, and various configuration items. The output is most commonly a Mach-O image, although it’s also possible to output an object file. The linker may also output metadata, such as a link map (see Using a Link Map to Track Down a Symbol’s Origin). The linker has seen three major implementations: ld — This dates from the dawn of Mac OS X. ld64 — This was a rewrite started in the 2005 timeframe. Eventually it replaced ld completely. If you type ld, you get ld64. ld_prime — This was introduced with Xcode 15. This isn’t a separate tool. Rather, ld now supports the -ld_classic and -ld_new options to select a specific implementation. Note During the Xcode 15 beta cycle these options were -ld64 and -ld_prime. I continue to use those names because the definition of new changes over time (some of us still think of ld64 as the new linker ;–). The dynamic linker loads Mach-O images at runtime. Its path is /usr/lib/dyld, so it’s often referred to as dyld, dyld, or DYLD. Personally I pronounced that dee-lid, but some folks say di-lid and others say dee-why-el-dee. IMPORTANT Third-party executables must use the standard dynamic linker. Other Unix-y platforms support the notion of a statically linked executable, one that makes system calls directly. This is not supported on Apple platforms. Apple platforms provide binary compatibility via system dynamic libraries and frameworks, not at the system call level. Note Apple platforms have vestigial support for custom dynamic linkers (your executable tells the system which dynamic linker to use via the LC_LOAD_DYLINKER load command). This facility originated on macOS’s ancestor platform and has never been a supported option on any Apple platform. The dynamic linker has seen 4 major revisions. See WWDC 2017 Session 413 (referenced below) for a discussion of versions 1 through 3. Version 4 is basically a merging of versions 2 and 3. The dyld man page is chock-full of useful info, including a discussion of how it finds images at runtime. Every dynamic library has an install name, which is how the dynamic linker identifies the library. Historically that was the path where you installed the library. That’s still true for most system libraries, but nowadays a third-party library should use an rpath-relative install name. For more about this, see Dynamic Library Identification. Mach-O images are position independent, that is, they can be loaded at any location within the process’s address space. Historically, Mach-O supported the concept of position-dependent images, ones that could only be loaded at a specific address. While it may still be possible to create such an image, it’s no longer a good life choice. Mach-O images have a default load address, also known as the base address. For modern position-independent images this is 0 for library images and 4 GiB for executables (leaving the bottom 32 bits of the process’s address space unmapped). When the dynamic linker loads an image, it chooses an address for the image and then rebases the image to that address. If you take that address and subtract the image’s load address, you get a value known as the slide. Xcode 15 introduced the concept of a mergeable library. This a dynamic library with extra metadata that allows the linker to embed it into the output Mach-O image, much like a static library. Mergeable libraries have many benefits. For all the backstory, see WWDC 2023 Session 10268 Meet mergeable libraries. For instructions on how to set this up, see Configuring your project to use mergeable libraries. If you put a mergeable library into a framework structure you get a mergeable framework. Xcode 15 also introduced the concept of a static framework. This is a framework structure where the framework’s dynamic library is replaced by a static library. Note It’s not clear to me whether this offers any benefit over creating a mergeable framework. Earlier versions of Xcode did not have proper static framework support. That didn’t stop folks trying to use them, which caused all sorts of weird build problems. A universal binary is a file that contains multiple architectures for the same platform. Universal binaries always use the universal binary format. Use the file command to learn what architectures are within a universal binary. Use the lipo command to manipulate universal binaries. A universal binary’s architectures are either all in Mach-O format or all in the static library archive format. The latter is called a universal static library. A universal binary has the same extension as its non-universal equivalent. That means a .a file might be a static library or a universal static library. Most tools work on a single architecture within a universal binary. They default to the architecture of the current machine. To override this, pass the architecture in using a command-line option, typically -arch or --arch. An XCFramework is a single document package that includes libraries for any combination of platforms and architectures. It has the extension .xcframework. An XCFramework holds either a framework, a dynamic library, or a static library. All the elements must be the same type. Use xcodebuild to create an XCFramework. For specific instructions, see Xcode Help > Distribute binary frameworks > Create an XCFramework. Historically there was no need to code sign libraries in SDKs. If you shipped an SDK to another developer, they were responsible for re-signing all the code as part of their distribution process. Xcode 15 changes this. You should sign your SDK so that a developer using it can verify this dependency. For more details, see WWDC 2023 Session 10061 Verify app dependencies with digital signatures and Verifying the origin of your XCFrameworks. A stub library is a compact description of the contents of a dynamic library. It has the extension .tbd, which stands for text-based description (TBD). Apple’s SDKs include stub libraries to minimise their size; for the backstory, read this post. Use the tapi tool to create and manipulate stub libraries. In this context TAPI stands for a text-based API, an alternative name for TBD. Oh, and on the subject of tapi, I’d be remiss if I didn’t mention tapi-analyze! Stub libraries currently use YAML format, a fact that’s relevant when you try to interpret linker errors. If you’re curious about the format, read the tapi-tbdv4 man page. There’s also a JSON variant documented in the tapi-tbdv5 man page. Note Back in the day stub libraries used to be Mach-O files with all the code removed (MH_DYLIB_STUB). This format has long been deprecated in favour of TBD. Historically, the system maintained a dynamic linker shared cache, built at runtime from its working set of dynamic libraries. In macOS 11 and later this cache is included in the OS itself. Libraries in the cache are no longer present in their original locations on disk: % ls -lh /usr/lib/libSystem.B.dylib ls: /usr/lib/libSystem.B.dylib: No such file or directory Apple APIs, most notably dlopen, understand this and do the right thing if you supply the path of a library that moved into the cache. That’s true for some, but not all, command-line tools, for example: % dyld_info -exports /usr/lib/libSystem.B.dylib /usr/lib/libSystem.B.dylib [arm64e]: -exports: offset symbol … 0x5B827FE8 _mach_init_routine % nm /usr/lib/libSystem.B.dylib …/nm: error: /usr/lib/libSystem.B.dylib: No such file or directory When the linker creates a Mach-O image, it adds a bunch of helpful information to that image, including: The target platform The deployment target, that is, the minimum supported version of that platform Information about the tools used to build the image, most notably, the SDK version A build UUID For more information about the build UUID, see TN3178 Checking for and resolving build UUID problems. To dump the other information, run vtool. In some cases the OS uses the SDK version of the main executable to determine whether to enable new behaviour or retain old behaviour for compatibility purposes. You might see this referred to as compiled against SDK X. I typically refer to this as a linked-on-or-later check. Apple tools support the concept of autolinking. When your code uses a symbol from a module, the compiler inserts a reference (using the LC_LINKER_OPTION load command) to that module into the resulting object file (.o). When you link with that object file, the linker adds the referenced module to the list of modules that it searches when resolving symbols. Autolinking is obviously helpful but it can also cause problems, especially with cross-platform code. For information on how to enable and disable it, see the Build settings reference. Mach-O uses a two-level namespace. When a Mach-O image imports a symbol, it references the symbol name and the library where it expects to find that symbol. This improves both performance and reliability but it precludes certain techniques that might work on other platforms. For example, you can’t define a function called printf and expect it to ‘see’ calls from other dynamic libraries because those libraries import the version of printf from libSystem. To help folks who rely on techniques like this, macOS supports a flat namespace compatibility mode. This has numerous sharp edges — for an example, see the posts on this thread — and it’s best to avoid it where you can. If you’re enabling the flat namespace as part of a developer tool, search the ’net for dyld interpose to learn about an alternative technique. WARNING Dynamic linker interposing is not documented as API. While it’s a useful technique for developer tools, do not use it in products you ship to end users. Apple platforms use DWARF. When you compile a file, the compiler puts the debug info into the resulting object file. When you link a set of object files into a executable, dynamic library, or bundle for distribution, the linker does not include this debug info. Rather, debug info is stored in a separate debug symbols document package. This has the extension .dSYM and is created using dsymutil. Use symbols to learn about the symbols in a file. Use dwarfdump to get detailed information about DWARF debug info. Use atos to map an address to its corresponding symbol name. Different languages use different name mangling schemes: C, and all later languages, add a leading underscore (_) to distinguish their symbols from assembly language symbols. C++ uses a complex name mangling scheme. Use the c++filt tool to undo this mangling. Likewise, for Swift. Use swift demangle to undo this mangling. For a bunch more info about symbols in Mach-O, see Understanding Mach-O Symbols. This includes a discussion of weak references and weak definition. If your code is referencing a symbol unexpectedly, see Determining Why a Symbol is Referenced. To remove symbols from a Mach-O file, run strip. To hide symbols, run nmedit. It’s common for linkers to divide an object file into sections. You might find data in the data section and code in the text section (text is an old Unix term for code). Mach-O uses segments and sections. For example, there is a text segment (__TEXT) and within that various sections for code (__TEXT > __text), constant C strings (__TEXT > __cstring), and so on. Over the years there have been some really good talks about linking and libraries at WWDC, including: WWDC 2023 Session 10268 Meet mergeable libraries WWDC 2022 Session 110362 Link fast: Improve build and launch times WWDC 2022 Session 110370 Debug Swift debugging with LLDB WWDC 2021 Session 10211 Symbolication: Beyond the basics WWDC 2019 Session 416 Binary Frameworks in Swift — Despite the name, this covers XCFrameworks in depth. WWDC 2018 Session 415 Behind the Scenes of the Xcode Build Process WWDC 2017 Session 413 App Startup Time: Past, Present, and Future WWDC 2016 Session 406 Optimizing App Startup Time Note The older talks are no longer available from Apple, but you may be able to find transcripts out there on the ’net. Historically Apple published a document, Mac OS X ABI Mach-O File Format Reference, or some variant thereof, that acted as the definitive reference to the Mach-O file format. This document is no longer available from Apple. If you’re doing serious work with Mach-O, I recommend that you find an old copy. It’s definitely out of date, but there’s no better place to get a high-level introduction to the concepts. The Mach-O Wikipedia page has a link to an archived version of the document. For the most up-to-date information about Mach-O, see the declarations and doc comments in <mach-o/loader.h>. Revision History 2025-08-04 Added a link to Determining Why a Symbol is Referenced. 2025-06-29 Added information about autolinking. 2025-05-21 Added a note about the legacy Mach-O stub library format (MH_DYLIB_STUB). 2025-04-30 Added a specific reference to the man pages for the TBD format. 2025-03-01 Added a link to Understanding Mach-O Symbols. Added a link to TN3178 Checking for and resolving build UUID problems. Added a summary of the information available via vtool. Discussed linked-on-or-later checks. Explained how Mach-O uses segments and sections. Explained the old (-classic) and new (llvm-) tool variants. Referenced the Mach-O man page. Added basic info about the strip and nmedit tools. 2025-02-17 Expanded the discussion of dynamic library identification. 2024-10-07 Added some basic information about the dynamic linker shared cache. 2024-07-26 Clarified the description of the expected load address for Mach-O images. 2024-07-23 Added a discussion of position-independent images and the image slide. 2024-05-08 Added links to the demangling tools. 2024-04-30 Clarified the requirement to use the standard dynamic linker. 2024-03-02 Updated the discussion of static frameworks to account for Xcode 15 changes. Removed the link to WWDC 2018 Session 415 because it no longer works )-: 2024-03-01 Added the WWDC 2023 session to the list of sessions to make it easier to find. Added a reference to Using a Link Map to Track Down a Symbol’s Origin. Made other minor editorial changes. 2023-09-20 Added a link to Dynamic Library Identification. Updated the names for the static linker implementations (-ld_prime is no more!). Removed the beta epithet from Xcode 15. 2023-06-13 Defined the term Mach-O image. Added sections for both the static and dynamic linkers. Described the two big new features in Xcode 15: mergeable libraries and dependency verification. 2023-06-01 Add a reference to tapi-analyze. 2023-05-29 Added a discussion of the two-level namespace. 2023-04-27 Added a mention of the size tool. 2023-01-23 Explained the compile-time and run-time roles of a framework. Made other minor editorial changes. 2022-11-17 Added an explanation of TAPI. 2022-10-12 Added links to Mach-O documentation. 2022-09-29 Added info about .dSYM files. Added a few more links to WWDC sessions. 2022-09-21 First posted.
Replies
0
Boosts
0
Views
15k
Activity
Aug ’25
"A software update is required" message is shown when running beta software
I'm running the latest iOS 26 beta 5 on my iPad and iPhone. Whenever I run these betas, I always get the message below telling me an update is available (whenever I plug in my devices). I'm assuming this is because the update check is detecting that I have something other than the latest production release. Obviously, it makes no sense to ask me to update to a prod build when I'm running the dev beta. Is there a way to turn this message off? Or maybe Apple could handle this situation better? Or maybe it's just a bug and I'm the only one getting this message?
Replies
1
Boosts
0
Views
82
Activity
Aug ’25
macOS 15.6: Opened package is not the same at install time
I've created an installation package and it is failing to install on macOS 15.6. The package is, I believe, properly notarized, since it will install correctly on other macOS versions, including 15.5 The only clue I have is the output from installer: installer[8015] : Opened package is not the same at install time installer[8015] : Unable to use PK session due to incompatible packages. Terminating. installer[8015] : Install failed: The Installer could not install the software because there was no software found to install. The installer consists of a a single "component" package, and the outer "product" package. The component package is present, and I can successfully run installer manually to install it, so I don't think the component package is corrupt. Has anyone else encountered this? Are there any tools available to help me diagnose the issue? The logging is not helpful.
Replies
2
Boosts
0
Views
216
Activity
Aug ’25
How to Obtain License File for Main Camera Access Entitlement in visionOS (Email Was Deactivated During Approval)
Hi everyone, I'm developing a visionOS application using Unity with an enterprise developer account. I applied for the Main Camera Access entitlement, but at the time of submission, the email address associated with my Apple ID was deactivated, so I couldn’t receive any email communication from Apple. Later, I updated the email address for my Apple ID. Now, in the Apple Developer portal under Identifiers, I can see that my app has been granted Main Camera Access, and I can also add the corresponding capability in Xcode. However, according to Apple’s documentation(https://developer.apple.com/documentation/visionos/building-spatial-experiences-for-business-apps-with-enterprise-apis): “To use entitlements, you need to include both the entitlement file and a corresponding license file in your app. After Apple approves your app for one or more entitlements, you receive a license file, along with additional instructions.” I never received this license file, possibly due to the deactivated email. I don't know where to find it or how to retrieve it now. What exactly is this license file? If it was originally sent to an unreachable email, how can I request it again or get it resent? Where in the Apple Developer portal (or elsewhere) can I access or download this file? Any help or guidance would be greatly appreciated! Thanks in advance.
Replies
2
Boosts
0
Views
123
Activity
Aug ’25
Are watchdog timeout terminations a crash or not?
If an iOS app gets terminated by watchdog due to, for example, hanging the main thread, is that considered to be a crash or something different. I'm asking because, according to google and AI, Crashlytics can detect and report these,but in my experience it does not. If I deliberately cause a watchdog termination by for example sleeping on the main thread for a long time then these never appear in Crashlytics. I know Apple folks here don't comment on non Apple software, so I'm not asking about Crashlytics, just wondering and interested about watchdog timeout terminations and how they differ from a "regular" crash.
Replies
1
Boosts
0
Views
156
Activity
Mar ’25
Assistance Needed with Enabling Speech Recognition Entitlement for iOS App
Subject: Assistance Needed with Enabling Speech Recognition Entitlement for iOS App Hi everyone, I’m seeking guidance regarding the Speech Recognition entitlement for my iOS app using Capacitor. Our App and we submitted a request to Apple Developer Support four days ago, but have not yet received a response. 🧩 Summary of the issue: Our app uses the Capacitor speech recognition plugin (@capacitor-community/speech-recognition) to listen for native voice input on iOS. We have added both of the required keys in Info.plist: NSSpeechRecognitionUsageDescription NSMicrophoneUsageDescription We previously had a duplicate microphone key, which caused the system to silently skip the permission request. After removing the duplicate, we did briefly see the microphone permission prompt appear. However, in our most recent builds, the app launches without any prompts, even on a fresh install. The plugin reports: available = true permissionStatus = granted Despite this, no speech input is ever received, and the listener returns nothing. We believe the app is functioning correctly at a code level (plugin loads, no errors, correct Info.plist), but suspect the missing Speech Recognition entitlement is blocking actual access to the speech system. 🔎 What we need help with: How can we confirm whether the Speech Recognition entitlement is enabled for our App ID? If it’s not enabled, is there a way to escalate or re-submit the request? Our app is currently stuck until this entitlement is granted. Thank you for your time and any guidance you can offer!
Replies
6
Boosts
0
Views
315
Activity
Jun ’25
Unexpected app version in logs — does MARKETING_VERSION change dynamically?
Hello, I've encountered unexpected behavior related to version information in our app logs, and I'd like to ask for some advice. We reviewed logs collected from a user running our app (currently available on the App Store). The logs are designed to include both the build number and the app version. Based on the build number in the logs, we believe the installed app version on the user's device is 1.0.3. However, the app version recorded in the logs is 1.1.5, which is the latest version currently available on the App Store. In our project, we set the app version using the MARKETING_VERSION environment variable. This value is configured via XcodeGen, and we define it in a YAML file. Under normal circumstances, the value defined in the YAML file (MARKETING_VERSION = 1.0.3) should be embedded in the app and reflected in the logs. But in this case, the version from the current App Store release (1.1.5) appears instead, which was unexpected. We'd like to know what might cause this behavior, and if there are any known factors that could lead to this. Also, is it possible that MARKETING_VERSION might somehow dynamically reflect the version currently available on the App Store? YAML: info.plist:
Replies
0
Boosts
0
Views
90
Activity
Jun ’25