【问题标题】:Undefined symbols after crashlytics updatecrashlytics 更新后未定义的符号
【发布时间】:2015-07-05 19:26:39
【问题描述】:

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

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 Clean 对项目采取行动
  • 删除/Users/losiennik/Library/Developer/Xcode/DerivedData的内容
  • Link Binary from Libraries 中删除并再次添加Crashlytics.frameworkFabric.framework 中的Xcode 6.3.1 目标Build Phases
  • 从项目中物理删除这些框架文件,然后从我从头开始安装框架的另一个项目中再次添加它们
  • 正在删除/var/folders 内容

我已经对可能的解决方案进行了所有可能的组合,并尝试运行并杀死 xcode,也重新启动操作系统。没有任何效果。

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

【问题讨论】:

    标签: xcode compilation linker crashlytics


    【解决方案1】:

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

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

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

    感谢面料团队 :)!

    【讨论】:

    • 这没有任何意义,也不是问题所在。您的应用程序 ID 在某个远程服务器上的状态不会以任何方式影响链接器。
    • 是的,你是对的,这几天对我来说也没有任何意义。但在这种特定情况下,fabric 插件负责下载足够的框架(Fabric.framework 和 Crashlytics.framework)。虽然应用程序 ID 的状态是错误的,但结构插件只更新了没有 Crashlytics.framework 的 Fabric.framework(我也没有最新的库版本)。然后我没有正确版本的 crashlytics 二进制文件,导致链接器错误。
    • 好吧,这更有意义。
    【解决方案2】:

    如果您决定不使用 CocoaPods,那么您显然使用了第二个选项,将 Run Script 放入 Build Phases

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

    运行脚本将复制文件:

    • Crashlytics.framework
    • Fabric.framework

    进入您的项目目录,但有时还不够,您还需要将 2 个框架复制/引用到您的 Xcode 项目中。

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

    之后应该可以正常编译。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-11-18
        • 2017-10-26
        • 2021-11-24
        • 2023-03-18
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多