Objective c 在独立于目标c项目的项目中调用swift文件。苹果Mach-o连接器错误

Objective c 在独立于目标c项目的项目中调用swift文件。苹果Mach-o连接器错误,objective-c,swift,linker-errors,objective-c-swift-bridge,Objective C,Swift,Linker Errors,Objective C Swift Bridge,我们有一个传统的iOS objective C应用程序。我们希望添加“swift”功能。创建了一个单独的“Cocoa touch framework”项目,以将其与“objective C”项目相参照。当我试图从objective c调用/init swift中的任何方法时,我遇到了这个错误 Ld/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/Products/D

我们有一个传统的iOS objective C应用程序。我们希望添加“swift”功能。创建了一个单独的“Cocoa touch framework”项目,以将其与“objective C”项目相参照。当我试图从objective c调用/init swift中的任何方法时,我遇到了这个错误

Ld/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/Products/Debug-iphonesimulator/super.app/super-normal x86_64 cd/Users/teeboy/iWorkbench/super 导出IPHONEOS_部署_目标=10.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/toolschains/XcodeDefault.xctoolschain/usr/bin/clang-arch x86_64-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk-L/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/Products/Debug iphonesimulator-F/Users/teeboy/Library/developed/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaqi/Build/Products/Debug iphonesimulator-F/Users/teeboy/iWorkbench/super-filelist/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeqsnbmtglaaqi/Build/Debug-iphonesimulator/super.Build/Objects-normal/x86_64/super.LinkFileList-Xlinker-rpath-Xlinker@executable_path/Frameworks-mios模拟器版本min=10.0-dead_strip-Xlinker-object_-path_-lto-Xlinker-Xlinker/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeqsnbmtglaaqi/Build/Intermediates/super.Build/Debug iphonesimulator/super.Build/Objects normal/x86_64/super_lto.o-Xlinker-no_重复数据消除-Xlinker-objc_abi版本-Xlinker 2-fobjc-arc-fobjc-link运行时-objc-all-load-Xlinker-sectcreate-inker-Xlinker-TEXT-Xlinker__权利-Xlinker/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/mediates/super.Build/Debug-iphonesimulator/super.Build/super.app.xcent-lz-lpartientsearch-framework MapKit-framework-ZipArchive-framework-QuartzCore-lMobuleMenuCell-framework-OCMockitoIOS-framework- LoDoListTrace-框架CordEDATA -框架- CORTEXTECT-CORTEXTECT-CRACHLISTICS -框架CeleloCist-LVisTeNo-LDATAccess——LDHeBase-框架MyStudioReServices——框架系统配置-LFrask-LSufOrg-框架UIKIT-OrgCurrTiSOS框架基础-框架核心图形-Xlinker-dependency_info-Xlinker/Users/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/Intermediates/super.Build/Debug-iphonesimulator/super.Build/Objects-normal/x86_64/super_dependency_info.dat-o/用户/teeboy/Library/Developer/Xcode/DerivedData/super-aybvkjtipygrszeyqsnbmtglaaqi/Build/Products/Debug-iphonesimulator/super.app/super

架构x86_64的未定义符号: “_OBJC_CLASS_$uuuu TtC5utils3zip”,引用自: libDashboard.a(ASLandingPageVC.o)中的objc类引用 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)


swift图书馆的名称为“utils”。遗留的objective c应用程序使用其他一些项目依赖项。抱歉,xcode新手。

不知道您在Objective-C应用程序中是如何引用Swift框架的,我只能猜测您引用了一个框架二进制文件,该二进制文件是为一个与您尝试构建应用程序的平台不同的平台构建的

例如,如果您为设备构建框架,然后在应用程序的构建设置下的框架搜索路径中包含指向包含生成的.framework目录的目录的路径,然后尝试为模拟器构建应用程序,则会发生这种情况。如果您使用了正确的框架二进制文件(本例中为模拟器而构建),它就会工作

然而,一种更优雅的方法是在应用程序中嵌入Swift框架。假设框架和应用程序位于不同的项目中,您可以执行以下操作:

  • 确保框架项目未在Xcode中打开
  • 在Xcode中打开应用程序项目
  • 将框架的.xcodeproj从Finder拖动到Xcode中的应用程序项目以创建引用
  • 在General->Embedded Binaries下添加您的Swift.framework
  • 当您构建应用程序时,Xcode将为正确的体系结构构建框架,并使用它并将其嵌入到您的应用程序中

有关嵌入框架的更多信息,请参阅。顺便说一句,当链接器出现故障时,您是否也看到了来自
ld
的关于文件缺少所需架构的警告?

但不知道您是如何在Objective-C应用程序中引用Swift框架的,我只能猜测,您引用了一个框架二进制文件,它是为一个与您尝试构建应用程序的平台不同的平台构建的

例如,如果您为设备构建框架,然后在应用程序的构建设置下的框架搜索路径中包含指向包含生成的.framework目录的目录的路径,然后尝试为模拟器构建应用程序,则会发生这种情况。如果您使用了正确的框架二进制文件(本例中为模拟器而构建),它就会工作

然而,一种更优雅的方法是在应用程序中嵌入Swift框架。假设框架和应用程序位于不同的项目中,您可以执行以下操作:

  • 确保框架项目未在Xcode中打开
  • 在Xcode中打开应用程序项目
  • 将框架的.xcodeproj从Finder拖动到Xcode中的应用程序项目以创建引用
  • 在General->Embedded Binaries下添加您的Swift.framework。