更新到 Parse 1.8.4 pod 后出现 Apple Mach-O Linker 错误

Apple Mach-O Linker error after updating to Parse 1.8.4 pod

更新到最新的 Parse pod (1.8.4) 后,我仅在为设备构建时收到 Apple Mac-O 链接器错误。模拟器工作正常

Ld /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting normal arm64
    cd "/Users/mile/Projects/Nanusim Xcode/nanusim_obejctiveC/Nanuism/Pods"
    export IPHONEOS_DEPLOYMENT_TARGET=8.4
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk -L/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -L/Users/mile/Projects/Nanusim\ Xcode/nanusim_obejctiveC/Nanuism/Pods/ParseCrashReporting -F/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -filelist /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting.LinkFileList -install_name @rpath/ParseCrashReporting.framework/ParseCrashReporting -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -dead_strip -ObjC -lParseCrashReportingLib -lsqlite3 -lstdc++.6 -lz -framework CFNetwork -framework Foundation -framework Security -framework SystemConfiguration -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=8.4 -framework Bolts -framework CFNetwork -framework Foundation -framework Parse -framework Security -framework SystemConfiguration -single_module -compatibility_version 1 -current_version 1.8.4 -Xlinker -dependency_info -Xlinker /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting_dependency_info.dat -o /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting



ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

请查看 findObjectsInBackgroundWithBlock 方法的签名。将 AnyObject 更改为 PFObject 应该可以解决问题。

这是 ParseCrashReporting 库的问题。 1.8.2 版本没有这个问题。在撰写本文时,该问题存在于 1.8.3、1.8.4 和 1.8.5(当前)中。

如果您可以从 6.4 升级到 Xcode 7,则此问题不会出现。

如果您仍然必须使用 6.4,这似乎与在测试目标中包含 Pods.xcconfig 以及在为设备构建时有关。

具体来说,link错误是:

duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.cmdline in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
duplicate symbol _llvm.embedded.module in:
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
    [redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

都和libParseCrashReportingLib.a

有关

我已在此处 https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/271 提交了 Parse 问题,其中包括 link 示例项目以重现它。不过步骤很简单:

  1. 在Xcode6.4新建一个单一视图iOS应用项目
  2. 创建一个 Podfile 其中包括 ParseCrashReporting:

     source 'https://github.com/CocoaPods/Specs.git'
     platform :ios, '8.0'
     pod 'ParseCrashReporting', '~> 1.8'
    
  3. 执行一个pod install

  4. 打开生成的 xcworkspace 并将 Pods.xcconfig 添加到测试目标。
  5. 为设备构建
  6. 构建失败并出现上述针对测试目标的 linker 错误。