Missing BCSymbolMap for AppStore Submission - Xcode7B5

Does anyone has a clue what Xcode is trying to tell me?


"The archive did not contain <DVTFilePath:0x7f88ca959ef0:'/Users/mobileserver/Library/Developer/Xcode/Archives/2015-08-17/Project 2015-08-17 14.46.29.xcarchive/BCSymbolMaps/DCF72CBF-7889-372D-B549-2CFA181C32CA.bcsymbolmap'> as expected."

Replies

Right you are! Thanks a lot, if only I had found this answer an hour ago... 😝

I'm also having exactly the same problem. Your speculation would seem to make sense. Did you file a Radar?

Adding to your speculation, you can probably never check "include app symbols" if you are submitting an Apple Watch application, since it must be bitcode enabled. So in mycase, validation fails no matter how I roll the dice, unless "include app symbols" is disabled.

Seeing the same issue. If I uncheck Bitcode enabled or include app symbols validation works. Like mbrown, I'm currious to know if there was a Radar filed?

Another weird thing with this error. The same project - 2 developers did clean checkout from git. The same set of roles for portal/itunes connect accounts, the same set of provisioning.

One developer can upload new build, the second can't - bcsymbolmap error. What may be wrong?

And more - if 2-nd developer (who can't upload) create xcarchive, send it to 1-st, 1-st can upload without errors...

Were you able to figure it out? I'm now having this issue as well (XCode 7.2)... Project has bitcode enabled, Pods have bitcode enabled, but still get this error when validating with Bitcode enabled. Turning Bitcode OR symbolication off passes validation; can't pass with both enabled.

A BCSymbolMap is a lot like a dSYM for bitcode. This is why you can work around the issue by either not uploading symbols or not using bitcode. However if you don't upload symbols, then you won't get symbolicated crashreports on iTunesConnect, and if you don't use bitcode... then you won't have bitcode.


The real solution is to make sure your xcarchive has 2 BCSymbolMaps for each object file (app + framework). For example


otool -l /Users/drew/Library/Developer/Xcode/Archives/2015-12-17/MyArchive.xcarchive/Products/Applications/MyApp.app/MyApp | grep uuid
    uuid 8D0CCABC-FD9C-346F-A1E7-7FF1B3C0EB46
    uuid 78D6CAC5-3B32-3A70-8808-7987D9C07667

otool -l /Users/drew/Library/Developer/Xcode/Archives/2015-12-17/MyArchive.xcarchive/Products/Applications/MyApp.app/Frameworks/MyFramework.framework/MyFramework | grep uuid
    uuid 27647D24-F5DE-37E6-A26D-F55FF7518994
    uuid 636808D2-CB4D-323F-BC2E-F87EFEBF4606


Here we have 4 UUIDs, so we expect


ls -l /Users/drew/Library/Developer/Xcode/Archives/2015-12-17/MyArchive.xcarchive/BCSymbolMaps
total 448
-rw-------  1 drew  staff  42067 Dec 16 19:25 27647D24-F5DE-37E6-A26D-F55FF7518994.bcsymbolmap
-rw-------  1 drew  staff  42087 Dec 16 19:25 636808D2-CB4D-323F-BC2E-F87EFEBF4606.bcsymbolmap
-rw-------  1 drew  staff  65639 Dec 17 00:21 78D6CAC5-3B32-3A70-8808-7987D9C07667.bcsymbolmap
-rw-------  1 drew  staff  65615 Dec 17 00:21 8D0CCABC-FD9C-346F-A1E7-7FF1B3C0EB46.bcsymbolmap


These BCSymbolMap files are generated when you build the associated framework/app. If you are using a tool like Carthage/CocoaPods, you may need to trace the build chain and figure out where these files have ended up and how you can get them included in the the app archive.

Do you know what you need to do to get the BCSymbolMap files included into a framework? I'm working on building a private framework to be included in other apps, and I'm hitting the same problem when including the framework into a swift app (not sure about Objective-C) that it can't submit to the app store with both boxes checked.


Do I need to somehow include the BCSymbolMap files that get generated when the framework gets built and copy those into the application? I've never seen a cocoapod library that included BCSymbolMap files along with the framework itself.

Is anyone else here using Realm?


I had the same problem, and I changed all sorts of crazy things to try to get it fixed, so I'm not even sure what it was that worked...

First of all I removed all frameworks from my embedded frameworks and added them back.


And then, when I was doing that, I noticed I skiped a step when installing Realm. Here's what it says in the documentation:


In your unit test target’s “Build Settings”, add the parent path to

RealmSwift.framework
in the “Framework Search Paths” section.


So I checked my unit test target, which I hadn't even looked at so far, and added the path...

And then I archived my app again and it validated fine with both bitcode and symbols. o/


As I said, I tried all sorts of crazy things, so I'm not even sure if what worked was reinstalling the frameworks or adding the Realm search path or something else entirely, but I thought this was worth mentioning here. I was going crazy trying to solve this!

And here's something weirder...

When I added my frameworks back I dragged them to ebedded binaries and they showed up at the root of the project navigator.

I archived the project and validated the archived and everything worked out.

Then I moved the frameworks to another group inside the project navigator. Not an actual folder, just one of those regular yellow groups. And then the same problem came back again.

Then I removed the frameworks again and dragged them back to the embedded binaries and left them at the root of the project navigator. And, alas, it works again.

When I apply otool -l as you did it, I get a number of three uuid's for my app executable instead of only two. The file is ObjC and linked together with 3 bitcode-enabled static libraries. The executable is also bitcode-enabled.


Any idea, why there are 3 uuids's listed?


The uuid's in the BCSymbolMap files do match the list from otool. So, is that ok?


Anyway, I can also only validate the archive with either symbols or bitcode checked.

I fixed this!


Im using carthage and i added the build script mention in the instrctions before i added the embebed binaries!


So what i did was:


Remove the script that carthage recomends.

Make sure i added the frameworks to the "embbeded binaries" in the general tab. Not just drag and drop to the project.

Added the script back to the build phases. It will run after the Embebed Frameworks copy phase.

Done

Thanks drewcrawford.


I feel there is an opportunity to learn something here and would appreciate your help in diagnosing the issue. I previously submitted to itunes without issue with both boxes checked but suddenly am stumbling upon this issue.


When I use otool, I get two uuids for the app and one uuid for a separate framework which is my own and is in the same workspace. The two uuids from the app have associated BCSymbolMap files, but the single UUID from the framework does not have an associated file. Instead there are two further BCSymbolMap files which are a mystery. You assistance is appreciated.


EDIT


Upon further inspection, it seems that xcode is embedding the incorrect binary for the framework, but the correct BCSymbolMap files. It is taking the binary from the Build/Products/debug area, while it is taking the symbol files from build/intermediates which is the correct location for built frameworks.


Ideas on how to fix?

OK, so I found the issue, at least for me.


I have my own framework which is in a workspace alongside the apps that it is used for. When I added the framework to the app, it would link to an absolute path instead of a relative one. So, I fixed the issue by right clicking the embedded binary for the framework and selecting reveal in project navigator (which is the bar on the left). You can also just click the framework on the left (project navigator). Then you'll see the path is absolute. Change this to "relative to build" and it should embed properly.

Thanks. Unchecking "include bitcode" worked if we do it using Xcode manually. But we are planning to automate the Xcode build using Jenkins to TestFlight beta testing. So we don't have an option to uncheck "include bitcode" using Jenkins. Could someone provide suggestions?