crashlytics 更新后未定义的符号

Undefined symbols after crashlytics update

在我的项目中更新 crashlytics 框架后出现问题,当然是通过 fabric 应用程序,准确地说是链接器错误,在下面记录。

Ld /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp normal x86_64
cd /Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE
export IPHONEOS_DEPLOYMENT_TARGET=7.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.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 x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.3.sdk -L/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE -filelist /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -ObjC -lPods-AFNetworking -lPods-ActivateYourSalon -lPods-CocoaLumberjack -lPods-Foursquare-API-v2 -lPods-GZIP -lPods-MBProgressHUD -lPods-MLPAutoCompleteTextField -lPods-MTDates -lPods-UICKeyChainStore -lPods-UIResponder+KeyboardCache -lPods-WYPopoverController -lPods-zipzap -lc++ -lz -framework CoreGraphics -framework Foundation -framework MobileCoreServices -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -stdlib=libc++ -mios-simulator-version-min=7.0 -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/InternalApp.app.xcent -framework EventKit -framework MessageUI -framework Crashlytics -framework QuartzCore -framework MapKit -framework CoreLocation -framework CoreGraphics -framework UIKit -framework Foundation -lPods -framework Fabric -Xlinker -dependency_info -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp_dependency_info.dat -o /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp

Undefined symbols for architecture x86_64:
  "_CLSLog", referenced from:
      -[IAPSyncManager processSuccessfulHTTPRequest] in IAPSyncManager.o
      -[IAPLogService writeContentsOfURL:toStream:] in IAPLogService.o
      -[IAPServerObjectMapping serializedPrimaryKeyToJSONStringFrom:forObject:] in IAPServerObjectMapping.o
  "_CLSNSLog", referenced from:
      ___65-[IAPWeekDashboardViewController asyncInternalAppFetchSuccess:failure:]_block_invoke in IAPWeekDashboardViewController.o
      -[IAPSyncManager prepareForSynchronizationInForeground:] in IAPSyncManager.o
      ___50-[IAPSyncManager reenableIdleTimerAfterTwoMinutes]_block_invoke in IAPSyncManager.o
      -[IAPSyncManager reenableIdleTimer] in IAPSyncManager.o
      -[IAPJSONValidator validateJSONWithError:] in IAPJSONValidator.o
      -[IAPSynchronisationRelationship stringWithID:] in IAPSynchronisationRelationship.o
      _POSTDataDictionary in IAPSyncConstants.o
      ...
  "_OBJC_CLASS_$_Crashlytics", referenced from:
      objc-class-ref in IAPSyncManager.o
      objc-class-ref in Crashlytics+Utilities.o
      l_OBJC_$_CATEGORY_Crashlytics_$_Utilities in Crashlytics+Utilities.o
      objc-class-ref in IAPAppDelegate.o
     (maybe you meant: _OBJC_CLASS_$_CrashlyticsPlaceholderStatic)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我试图以多种方式解决这个问题,但我做不到。我尝试过的方法:

我已经对可能的解决方案进行了所有可能的组合,并且还尝试使用 运行 并终止了 xcode,还重新启动了 OS。什么都不管用。

您还有其他想法吗?也许有人知道 Xcode 在哪里存储可以在编译和链接过程中使用的临时文件?有人在更新该框架时有类似的经历吗?

原来问题的原因与我遇到的另一个问题有关。该问题导致我无法使用之前添加到我们旧组织帐户的结构插件帮助注册特定的应用程序 ID。我从那个旧组织中删除了那个应用程序 ID,但仍然无法将其添加到新组织。

感谢 fabric 支持成员,结果我的应用程序 ID 在后端处于奇怪的状态。更正后,我的应用程序 ID 出现在我们的组织帐户中,然后 fabric 插件下载了正确版本的 Crashlytics.framework 文件。在那之后,我对与 Crashlytics 二进制文件相关的 Apple Mach-O Linker Error 没有任何问题。

总结一下,只有你有上述问题或者添加app ID的问题,直接写信给fabric support,不要浪费你的时间。

感谢面料团队 :)!

如果你决定不使用 CocoaPods 那么你显然使用了第二个选项,在 Build Phases[=26= 中放置一个 运行 Script ]:

./Fabric.framework/run YourUniqueId!#$@#%!#$%@#$^@95209582523#@%!#$@%!#%235

运行 脚本将复制文件:

  • Crashlytics.framework
  • Fabric.framework

进入您的项目目录,但有时这还不够,您还需要将 2 个框架 copy/reference 进入您的 Xcode 项目。

可以导入 2 个框架(在上述复制过程之前),但 Xcode 需要对它们的引用。

之后应该可以正常编译。

我更新 Xcode 时遇到了这个问题。它在卸载并安装较新版本而不是更新后得到修复。