带有框架的iOS应用在设备上崩溃,dyld:库未加载,Xcode 6 Beta


573

此崩溃一直是一个阻止问题,我使用以下步骤来重现该问题:

  • 创建一个Cocoa Touch Framework项目
  • 添加一个快速文件和一个类Dog
  • 建立设备框架
  • 在Swift中创建一个Single View应用程序
  • 将框架导入应用程序项目
  • 从ViewController中的框架实例化swift类
  • 在设备上构建并运行应用

该应用立即在启动时崩溃,这是控制台日志:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

我尝试在iOS 7.1和8.0设备上构建,它们都崩溃了。但是,我可以构建一个应用程序并在模拟器上正常运行。另外,我知道我可以改变的框架,形成所需的可选链接二进制与图书馆,但它并不能完全解决问题,应用程序崩溃,当我创建的实例。在设备和模拟器上,行为是不同的,我怀疑我们无法使用Beta版的Xcode为设备分发框架。谁能阐明这一点?


1
我不明白的是为什么所有其他第三方框架都可以开箱即用,并且可以轻松地拖放到其中,Link Binary with Libraries并且Xcode知道以某种方式将它们复制到您的应用程序包中,而对于自定义框架,这根本不会发生。
fatuhoku

这里sazzad hissain汗的回答stackoverflow.com/questions/26024100/...是最好的答案..
ANKIT库马尔


您可以创建一个胖库,您可以看到以下链接:stackoverflow.com/a/54977145/3992606
mohsen

Xcode版本不匹配,可通过stackoverflow.com/a/55738882/5443510解决。
吉米·尹

Answers:


975

在目标的“ 常规”选项卡中,有一个“ 嵌入式二进制文件”字段。当您添加框架时,崩溃已解决。

参考是这里的苹果开发者论坛。


73
我在嵌入式二进制文件中有框架,在复制阶段也设置为“框架”。无论如何它都会崩溃。
loretoparisi 2014年

11
这仅在调试模式下解决。当您存档或构建项目时,将再次发生错误
Saad Ur Rehman 2014年

13
将@ executable_path / Frameworks添加到“运行路径搜索路径”可以解决此问题,即除了将框架添加到“嵌入式二进制文件”之外
ArdenDev 2015年

14
任何人都可以帮助如何从POD在嵌入式二进制文件中添加框架?
波恩克

3
同上。我倒是也想知道如何从荚增加,给没有“常规>嵌入式二进制文件”中的XCode 6.4被发现使用PODS
DED

259

对于iOS大于或等于8

在目标的“常规”选项卡下的“嵌入式二进制文件”部分中,添加框架。这会将框架复制到已编译的框架中,以便可以在运行时链接到该框架。

在此处输入图片说明

为什么会这样呢?:因为要链接的框架被编译为动态链接的框架,因此在运行时已链接到该框架。

**注意:**仅在iOS> 8中支持嵌入自定义框架,因此下面是适用于旧版iOS的替代解决方案。

对于小于8的iOS

如果您影响此框架(可以访问源代码/构建过程),则可以将此框架更改为静态链接而不是动态链接。这将导致代码包含在已编译的应用程序中,而不是在运行时链接到该应用程序,因此无需嵌入框架。

**方法:**在框架的“构建设置”选项卡下的“链接”部分中,将Mach-O类型更改为“静态库”。现在,您无需将框架包含在嵌入式二进制文件下。

静态框架

包括资产:为了包括诸如图像,音频或xib / nib文件之类的东西,我建议创建捆绑软件(基本上是目录,更多信息在此处bit.ly/ios_bundle),然后使用NSBundle从捆绑软件中加载资产。


1
如果框架位于Pod中,如何将框架添加到嵌入式二进制文件中?
TomazStoiljkovic 2015年

“框架在豆荚中”是什么意思?您的自定义框架是通过CocoaPods分发的吗?
道森

2
这应该是“大于或等于8”。我也必须在iOS 8上执行此操作。
Cruinh

错误Swift is not supported for static libraries
jose920405,2013年

@TomazStoiljkovic你知道了吗?我有同样的问题,我有一个要构建为二进制的框架,但是它依赖于通过可可豆荚的其他框架。
MegaManX

125

仅将框架拖到您的项目中是不够的。这就像在同一个球场上,却找不到您的孩子。按着这些次序:

1)创建框架

  • 开发您的框架。
  • 开发完成后,COMMAND+ B构建您的框架并确保您获得“成功构建”。

在此处输入图片说明

2)访问您的框架

  • 一旦框架项目成功构建,就可以Products在项目中的文件夹中进行访问了。

在此处输入图片说明

  • 右键单击您的鼠标,然后.framework选择“在Finder中显示”。

在此处输入图片说明

3)在您的项目中放置框架

  • .framework从Finder窗口中将拖放到应用程序项目的“ Framework”文件夹中。

在此处输入图片说明

4)为框架配置应用程序项目

  • 选择项目中的顶层

在此处输入图片说明

  • 选择你的目标

在此处输入图片说明

  • 转到“构建阶段”,然后选择“将二进制文件与库链接”,并确保您的框架包含在selected中

在此处输入图片说明

  • 仍在“构建阶段”中,转到左上方并选择+按钮。在下拉菜单中选择“新建副本文件阶段”。

在此处输入图片说明

  • 向下滚动到新的“复制文件”部分,并确保设置Destination为“ Frameworks”。将子路径保留为空。然后单击+左下方的按钮。

在此处输入图片说明

  • 您将看到您的项目层次结构。向下滚动到在第3步中将框架添加到的“ Frameworks”文件夹,或在顶部的搜索栏中进行搜索。选择您的框架,然后单击“添加”。

在此处输入图片说明

  • 确保选择了“代码登录副本”中包含您的框架。

在此处输入图片说明

5)清理,然后运行您的项目

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
好点子。这几乎对我有用。我制作了一个框架A,其中包括Alamofire。我的主机App(嵌入式框架A)在模拟器中工作。但是,当我尝试在真实的iPhone中运行它时,它崩溃并显示错误:Alamofire:dyld:库未加载:@ rpath / Alamofire.framework / Alamofire原因:找不到合适的图像。确实发现:XXX / ddcdemo.app /框架/ iddc.framework /框架/ Alamofire.framework / Alamofire:Mach-O的,但错误的体系结构
大椿

1
@布兰登使框架可选解决了我的问题。但是,能否请您解释一下使框架可选的行为?
Mitesh Dobareeya

2
谢谢!在您的步骤5中,我选中了“仅在安装时复制”,这就是我的问题。
安迪

48

我使用Swift3 / Xcode 8.1创建了一个框架,并在Objective-C / Xcode 8.1项目中使用了它。要解决此问题,我必须启用的Always Embed Swift Standard Libraries选项Build Options

看一下这个截图:

在此处输入图片说明


3
现在,这确实对我有用。解决此问题的方法是转到BuildPhases->复制文件->选择Destination下的Framework并添加您的框架。您的图书馆很可能不在这里。
哈里什

@Harish,您所建议的解决方案已经被一些人提出,当然我会首先解决。就我而言,该框架已添加到此处,但仍然出现相同的问题。然后我自己去挖。如果您
不赞成

@Harish谢谢。你的回答让我更和ofcourse NeverHopeless的也做了:)谢谢你们
穆赫辛Khubaib艾哈迈德

这是唯一对我有用的方法。但是我已经在目标Embedded Binaries部分中“嵌入”了该框架。那么,为什么要这样做呢?
guptron

太棒了,因为使用了快速库或Pod来嵌入目标C项目,所以这件事很有效。Objective C的项目往往有此标志号
Swaroop小号

47

首先尝试在Command + Option + Shift + K之后进行构建。如果仍然失败,请执行以下步骤。

如果有人在Xcode 8中遇到此错误,请在目标的“常规”选项卡下将框架状态更改为“ 可选”,而不是“必需”。

在此处输入图片说明


3
这将使运行时无法识别框架中的类
tesla 2013年

@azimov是正确的。我目前正面临这个难题。必需会导致“未找到图片”错误,如果我们尝试将其设置为可选图片,则会在运行时使用“无法识别的选择器”崩溃
Adam Mendoza

1
即使我的框架已经在“链接二进制文件”和“嵌入”中,我仍然必须添加复制阶段。dyld:未加载库:@ rpath / AFNetworking.framework / AFNetworking引用自:/ Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp原因:找不到映像(lldb)解决方案:项目->目标->构建阶段-> +在顶部添加新的复制文件阶段目标=框架选择框架需要复制的内容
Adam Mendoza

@AdamMendoza因为这样做,我的应用被拒绝了。
jbouaziz

@jbouaziz,是的,您可能会遇到错误是由于.framework太胖,这意味着它具有iOS上不支持的体系结构,例如i386 x86_64,除了必需的armv7 arm64。商店会给您一个错误,但是您可能不会在Xcode中看到该错误。在Xcode-> Open Developer Tool-> Application Loader下使用加载器。SolutionL使薄见- > ikennd.ac/blog/2015/02/...
亚当门多萨

28

我在iOS 9.x版本中遇到了同样的问题

问题是:我打开带有以下错误的应用程序后,应用程序崩溃了。

dyld:未加载库:/System/Library/Frameworks/UserNotifications.framework/UserNotifications 引用自:/var/containers/Bundle/Application/######/TestApp.app/TestApp 原因:找不到图片

我已经改变解决了这个问题Required,以OptionalLinked Frameworks and LibrariesUserNotifications.framework框架。


这可行。有人知道为什么吗?因为某些设备不需要此设置,而其他设备则不需要。
NEO

我得到“警告:在执行过程中无法执行支持代码来读取Objective-C类数据。这可能会降低可用类型信息的质量。” 当将我的lib标记为可选时
BergP

它起作用了,也许是因为某些框架未在模拟器中运行这就是为什么
Gowtham Sooryaraj

@ redent84这个答案,加上您的评论,使我免于发疯。遇到AuthenticationServices.framework这个问题,它需要
iOS12。

26

我必须(在此处提到的内容之上)将以下行添加到构建设置”选项卡下的“运行路径搜索路径”中
@executable_path/Frameworks

在此处输入图片说明


这为我解决了这个问题。将应用程序扩展程序添加到我的iOS 9应用程序后,我开始出现问题。在添加扩展之前,发现我的框架很好。添加“复制文件”构建阶段无济于事,我已经在嵌入框架。
格雷格

太奇怪了,默认情况下不包含此功能。如果您解压缩并查看IPA,则应该在Payloads / appname.app / Frameworks /中找到您的框架。但是,必须有添加此搜索路径的应用程序才能在运行时在此文件夹中查找。奇怪的。
mattv123

25

您需要将框架添加到新的“复制文件”构建阶段,以确保在运行时将框架复制到应用程序包中。

有关更多信息,请参见如何向我的目标添加“复制文件构建阶段”

官方Apple文件:https//developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


尝试了很多事情之后,这就是为我解决的问题。我已经在Link Binary和Embed Framework中拥有该框架。我认为我也不必添加复制阶段,但这已解决了这一问题。
亚当·门多萨

14

如果您使用的是Xcode 11或更高版本

  1. 导航到目标的设置,然后选择常规

目标设置/常规

  1. 向下滚动到Frameworks,Libraries和Embedded Content

  2. 如有必要,请确保为“ 嵌入”选项选择了“ 嵌入并签名”或“ 没有签名的嵌入”值。

框架,库和嵌入式内容部分


13

在嵌入式二进制文件中添加框架 在此处输入图片说明

然后清理并构建。


11

令人惊讶的是,这里并没有记录所有必要的部分,至少对于Xcode 8而言。

我的案例是作为同一工作空间一部分的定制框架。事实证明,它的构建不正确。基于jeremyhu对这个主题的最后回应:

https://forums.developer.apple.com/thread/4687

我必须在Framework Project 下设置Dynamic Library Install Name BaseDYLIB_INSTALL_NAME_BASE),然后重新构建它。错误地将其设置为,我不得不将其更改为。Build Settings$(LOCAL_LIBRARY_DIR)@rpath

因此,在App Project 的链接处理阶段,它指示主机App在运行时从/Library/Frameworks/fw.Framework/fw(例如,在运行时文件系统的根目录中)动态加载框架,而不是指向App的路径。/Frameworks/fw.Framework/fw

关于所有其他设置:它确实必须位于中的3个位置Build Phases,但是当您将其添加到托管应用程序Embedded BinariesGeneral标签的设置中时,这些都将一次设置。

不必设置额外的Copy Files阶段,就嵌入阶段而言,这似乎在直观上是多余的。通过检查构建记录的尾端,我们可以确保没有必要。

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[删除了许多冗长的行,但是从Xcode UI的简化抄本中可以清楚地看到。]

我仍然知道为什么Xcode DYLIB_INSTALL_NAME_BASE在我身上错误地设置了值。


1
谢谢,这原来是我在Xcode 11中遇到的问题。我正在导入自己的一个框架,该框架以前可以工作,但是开始发出“ dyld:库未加载”错误。明确地说,您要在要导入的框架的项目中而不是在要导入的项目中将构建设置“ Dynamic Library Install Name Base”设置为“ @rpath” 。它以某种方式设置为“ / Library / Frameworks”。
Ben Stahl

很高兴这在3年后提供了帮助。进行了相应的编辑。
BaseZen

9

在我的情况下,解决方案是从嵌入式二进制文件中删除编译的框架,该框架是工作区中的一个独立项目,清理并重建它,最后将其重新添加到嵌入式二进制文件中。


8

我的环境:Cocos2d 2.0,Box2d,Objective C

除了执行上面的其他答案外,我最终转到“常规”选项卡,并将“ WatchKit”设置为“可选”。

目标常规链接的框架和库Watchkit.framework可选


8

如果您使用的是第三方框架,并且将Cocoapods用作依赖项管理器,请尝试执行a pod install刷新您的Pod。

崩溃发生在我正在使用的第三方库上,很高兴上述解决方案对我有用,希望它对您有用!


1
大!解决了我的问题。但是有什么方法可以避免在主机应用程序中安装pod依赖项?
大竹

8

在此处输入图片说明

通过在构建阶段->嵌入式框架上取消选择“仅在安装时复制”来为我解决


1
如果系统不认为“调试安装”不是“安装”,那么很高兴知道此复选框的要点。无论如何,如果它导致应用程序在硬件上崩溃,而不是通过警告禁止应用程序运行,则这是另一个巧妙的Xcode缺陷
William Cerniuk

8

这是由以下原因引起的运行时错误 Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

错误Library not loaded@rpath表示Dynamic Linker找不到二进制文件。

  1. 检查动态框架是否已添加到 General -> Embedded Binaries

  2. 检查@rpath使用者(应用程序)和生产者(动态框架)之间的设置:

    • 动态框架:
      • Build Settings -> Dynamic Library Install Name
    • 应用:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

动态链接器

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)播放时loadable bundleDynamic framework作为派生对象)使用它-二进制文件(不是.framework)的路径。是的,他们具有相同的名称,但是是用二进制文件和资源内。 这个路径目录可以是绝对的或相对的(例如,,)。相对路径更可取,因为它会与锚一起更改,当您将分发包作为单个目录分发时,锚会很有用dyld
Dynamic Library Install NameMyFramework.frameworkpackaged bundleMyFramework
@executable_path@loader_path@rpath

绝对路径 - 框架1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path -相对于条目二进制- Framework2例如
用例:嵌入Dynamic framework到应用程序

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path -相对于捆绑这是该二进制的所有者
使用的情况下:与嵌入框架的框架- Framework3_1与Framework3_2

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath-运行路径搜索路径

Framework2示例

以前,我们必须设置一个与dyld一起使用的框架。这不方便,因为同一框架不能与其他配置一起使用

@rpath 是一个复合概念,它依赖于外部(应用程序)和嵌套(动态框架)部分:

  • 应用:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)-定义由代替的模板列表@rpath
       @executable_path/../Frameworks
    • 回顾Build Phases -> Embed Frameworks -> Destination, Subpath一下嵌入框架的确切位置
  • 动态框架:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- @rpath与本地二进制文件路径一起使用的 点
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../-转到当前目录的父目录

otool -目标文件显示工具

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool 使用以下命令更改动态共享库的安装名称 -rpath

CocoaPods使用use_frameworks![关于]来规范Dynamic Linker

[词汇]


6

最近,在较旧的iPhone(例如iPhone 6)和Xcode(11.3.1)上导入CoreNFC时遇到了此问题。我能够使它起作用

  1. 在您的项目中,选择目标。
  2. 转到顶部的“ 常规”选项卡。
  3. 在“ 框架,库和嵌入式内容 ”部分下,添加框架(对我来说是CoreNFC)。重复其他目标。
  4. 单击顶部的“ 构建阶段”,然后展开“将二进制文件与库链接 ”。
  5. 将麻烦的框架设为可选(从要求)。

这使我可以在不进行任何代码更改的情况下针对较旧/较新的iPhone进行编译。我希望这对其他人有帮助。


1
谢谢。使其成为可选项是缺少的链接...
fl034

不起作用,应用程序崩溃,并且没有消息指示崩溃类型,而不是某些汇编代码上的断点。
Newsonic

为什么需要将此设置为可选?
rohitwtbs

5

我遇到过同样的问题。我尝试使用从未使用过的iPhone构建项目,也没有添加新框架。对我而言,清理工作正常(Shift + Command + K)。也许是因为我使用Xcode 7的Beta 5和带有iOS 9 Beta的iPhone 6,但它确实有效。


也许还有一个干净的构建文件夹(CMD + Shift + Alt + K)
Grifas

4

就我而言,我的项目是由Objective-C编写的,并且在库中有Swift文件。因此,我在项目的“ 构建设置”选项卡中将“始终嵌入Swift标准库”更改为是”,这完全没问题。


4

对于任何使用pod的Xcode项目或Framework项目,避免动态库(dylb)不加载的一种简单方法是将pod文件设置为静态模式。为此,只需确保不要在pod文件中写以下行。

use_frameworks!

从您保存的文件中删除该行后,只需从控制台运行即可:

$ pod update


2

当我创建了一个新的配置和构建方案时,也发生了同样的事情

所以对我来说解决方案是运行

pod install

为此新创建的配置。


1

在尝试了Internet上所有可用的方法以及我自己的反复试验技巧100次之后。终于我解决了。– Apeksha Sahu 6分钟前
转到Mac中的iTunes- >帐户->授权此计算机– Apeksha Sahu 5分钟前进入
第二步....在iPad和iPhone中转到设置中的开发人员,并使用标识符重新索引并清除信任计算机的所有内容。它对我有用...............从Mac OS seirra beta最新版本重新安装Mac OSHigh seria 10.13.15版本之后,更新所有证书后重新安装Xcode最新版本。等等等等等等...你可以想到的很多方法。–在此处输入图片说明


1

尝试将“构建设置”中的标志ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(在早期的xcode版本中:)Embedded Content Contains Swift Code从NO更改为YES。


1

Xcode 11

  1. 导航到目标的设置,然后选择常规。
  2. 查找“框架,库和嵌入式内容”
  3. 保持“请勿嵌入”,并确保所有目标(如果您有多个目标)仅设置了自己的框架,而没有设置其他目标。

1

Xcode 11中

我面临着同样的问题

在“ 常规”选项卡 > “框架,库和嵌入式内容”中更改“不嵌入”仍会导致相同的错误。

为我解决的是在“ 构建阶段”选项卡 >“ 嵌入框架”部分中添加“ 框架”

- 更新 - -

我观察到在Xcode 11中运行时,在以前版本的Xcode Embed Frameworks部分中构建的项目中不可用,请找到以下步骤以实现解决方案:

1:首先需要在“ 构建阶段”选项卡下添加“ 新建副本文件”阶段

在此处输入图片说明

2:第二次将添加阶段的名称更改为Embed Frameworks 在此处输入图片说明

3:将目标更改为框架

在此处输入图片说明

4:添加发生错误的框架。

在此处输入图片说明


1

尽管所有人都说要将该框架嵌入“嵌入式二进制文件”下,但是它仍然无法正常工作,因为我们在这里缺少重要的一步。

这是在“嵌入式​​二进制文件”选项卡下添加二进制文件的两个正确步骤:

  1. 从“常规”选项卡下的“链接的框架和库”中删除出现错误的框架。

  2. 现在,仅在“嵌入式​​二进制文件”选项卡下添加已删除的框架,这就是所有要做的。

在设备上运行它并保持微笑;)


0
  1. 转到Xcode中的文件->工作区设置
  2. 单击旁边出现的箭头/ Users / apple / Library / Developer / Xcode / DerivedData
  3. 选择“派生数据”并将其移至“废纸。”。
  4. 相当Xcode并重新打开它。
  5. 清理项目,然后再次运行。

以上步骤解决了我的麻烦。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.