Found an unexpected Mach-O header code: 0x72613c21 in Xcode 7

可紊 提交于 2019-11-26 15:51:34

问题


I have a Swift project that uses a ObjC dynamic framework, the framework had to be linked with and embedded into my project. The project runs OK in devices, when submitted to App Store, the error occurred during validation: Found an unexpected Mach-O header code: 0x72613c21

Below are the validation logs:

2015-10-12 02:32:33 +0000 [MT] Beginning distribution assistant for archive: MusicFans, task: Validate
2015-10-12 02:32:33 +0000 [MT] Automatically selecting the only availaable distribution method <IDEDistributionMethodiOSAppStoreValidation: 0x7f851c1d96c0>
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f851b42db10:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/Frameworks/libswiftDispatch.dylib" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f8529a08050:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/wavpack.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:32:34 +0000 [MT] [OPTIONAL] Didn't find archived user entitlements for <DVTFilePath:0x7f850da13de0:'/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework'>: Error Domain=NSCocoaErrorDomain Code=4 "Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource." UserInfo={NSLocalizedDescription=Item at "/Users/panzhansheng/Library/Developer/Xcode/Archives/2015-10-11/MusicFans 11-10-15 上午8.29.xcarchive/Products/Applications/MusicFans.app/FLAC.framework" did not contain a "archived-expanded-entitlements.xcent" resource.}
2015-10-12 02:33:07 +0000 [MT] Canceled distribution assistant

If I remove the dynamic framework from the project’s Embedded frameworks section, then it can pass the validation, but crashes when run in devices due to the missing image of my dynamic framework, any idea? BTW, dynamic framework has bitcode disabled, so my project also disables bitcode, and is not codesigned.


回答1:


Check two things for every framework:

  1. The Mach-O type of the framework (in Build Settings of the framework target)

  1. Whether you copy the framework by putting it in Build Phases -> Embed Frameworks (or Copy Bundle Resources as mentioned by a. brooks hollar)

If the Mach-O type of the framework is "static library", it should not be put in embed frameworks; if the Mach-O type is "dynamic library", it should be put in embed frameworks.

In my case it was SocketRocket I added manually which has both a static library target and a dynamic library target with the same framework name. After deleting the static library target and only embed the dynamic library framework, the problem disappears.


Note:

If you don't have access to the source project, you can manually check if it's a dynamic or static framework using this approach: https://stackoverflow.com/a/32591983/308315




回答2:


Double check Build Phases -> Copy Bundle Resources for a framework or other binary that shoundn't be there.

In my case, it was a 3rd party library (Parse) that I had added.




回答3:


In my case, I have a framework manually dragged into my project, and it is listed in General->Embedded Binaries, which cause error Found an unexpected Mach-O header code: 0x72613c21. After i moved it from Embedded Binaries to Linked Frameworks and Libraries, problem solved.




回答4:


I had a same issue. I did a couple of things and my issue went away. I believe My issue was related to Cocoapods version but you can try couple of things here.

First clean DerivedData by:

1.Turn off Xcode

2.Go to ./Users/YourFile/Library/Developer/Xcode/DerivedData

3.Delete everything from this folder

4.Run Xcode

5.Build&Clean

Second for some reason, with latest cocoa pods version 0.39, I was getting following warning when I ran pod install

[!] The MY_TARTGET target overrides the EMBEDDED_CONTENT_CONTAINS_SWIFT build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation

I've downgraded cocoapods by removing all installed cocoapods:

sudo gem uninstall cocoapods

then install older version:

sudo gem install cocoapods -v 0.38.1

This removed the warning and I was able to remove the error, "unexpected Mach-O header code: 0x72613c21"




回答5:


For me, I had Fabric binaries in my Carthage /usr/local/bin/carthage copy-frameworks run script.

After removing those, it fixed the issue.

I'm using Xcode Version 9.4.1 (9F2000)




回答6:


Edit: This looks to be fixed in Xcode 8 Beta 3.

I'm currently experiencing this issue with Xcode 8 Beta 2 and Swift 3 with pure-swift Pods (which seems to be causing the issue).

Adding the following to my Podfile has fixed the problem.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'
    end
  end
end

Credit goes to this comment by YuAo on GitHub.




回答7:


I don't know why but somehow pods appeared to become an embedded binary. So I had to remove it, pod install once more, and the issue disappeared.




回答8:


Take a look at this Apple documentation Embedding Frameworks in An App go to the section Embedded Static Libraries they explain this error like this:

This is caused by placing a static library in a bundle structure that looks like a framework; this packaging is sometimes referred to by third party framework developers as a static framework. Since the binary in these situations is a static library, apps cannot embed it in the app bundle.

They also provide a way to fixed:

you can solve this error by identifying the static framework and removing it from the Embedded Binaries section.

You accomplish this by following the instructions in Inspecting A Binary's Linkage




回答9:


Remove them from Embedded Binaries and add them to Linked Frameworks and Libaries, then Archive again and upload to store.




回答10:


I ran into this error with a FacebookSDK framework. I removed it from the Embed frameworks list in Build Phases and it solved the issue. Inspect the log and find the framework causing the error as mentioned by others.




回答11:


In my case it was caused by change of Developer certificate/team.

I start project with personal Dev Apple ID and by the time I changed it to my work ID. When we try to export .xcarchive then "Match-O header" fail did appear. Nothing described here or at other sites don't change anything.

When I change Team back to my personal ID, error logs shows missing .xcent files for only few frameworks now (most recently added). So I start whole new project, paste all the sources and files, then run cocoapod and everything works as expect.




回答12:


I encountered this issue in a very simple Framework project. I only had one target in my project for the framework and it was building fine. I wanted to add some unit tests, so I added two new targets: an iOS Unit Testing Bundle target, and a Single View Application target (to act as a host app for the tests). However, both new targets were throwing this error.

I discovered that the problem was caused by the Mach-O Type build setting on the new targets being set to Static Library. Apparently the new targets were inheriting the Mach-O type from the parent Project. When I set the Mach-O Type to the correct settings ("Bundle" for unit tests and "Executable" for the host app) it all worked! I also had to clean build, delete derived data and reset the simulator to get the new settings to take.




回答13:


My way of fixing this was to get back to Fabric/Crashlytics installation via Cocoapods instead of fancy Carthage setup (which appeared buggy).




回答14:


Mike from Fabric here.

This was a bug in Xcode Beta 2 and 3, it's been fixed in Beta 4 and updating to the latest will resolve it.




回答15:


I had this problem with a manually-added PFFacebookUtils framework in a Swift 2.3 non-CocoaPods project. I fixed it by removing said framework from the embedded frameworks section of the "General" page of the build target and linked it in Build Phases -> Link Binary With Libraries




回答16:


Given the amount of time I've poured into finding this problem, it was caused by Cocoapods. I was working on a Workspace that had both iOS apps and a command line tool to kick off some pipelines and stuff. My file looked like this:

target 'AppPipe' do
  platform :osx, '10.14'
  project 'AppPipe/AppPipe.xcodeproj'
  pod 'Yams'

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['MACH_O_TYPE'] = 'staticlib'
      end
    end
  end
end

I thought the pods_install hook was local to the scope I was writing it in, but it wasn't! It actually turned all of my target's configs into staticlibs! This fixed it:

target 'AppPipe' do
  platform :osx, '10.14'
  project 'AppPipe/AppPipe.xcodeproj'
  pod 'Yams'
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
        # Only AppPipe always gets staticlib
        if target.name == 'AppPipe'
          config.build_settings['MACH_O_TYPE'] = 'staticlib'
        end
    end
  end
end



回答17:


I had same issue in Xcode 8 beta 3. I fixed it removing Fabric and Crashlytics from Linked frameworks (Project => Target => General page) (source)



来源:https://stackoverflow.com/questions/33076819/found-an-unexpected-mach-o-header-code-0x72613c21-in-xcode-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!