如果出现这种报错有很大可能是因为此次 *** 作添加的文件(或图片)有之前曾经加入过的,或本来就已存在的文件被 重复添加 了。举个例子:比如这次添加了4个文件,其中1个文件是项目中原本就存在的,那么就会报错,其他3个不重复的文件也很可能已经在这次 *** 作中被加入了。但是由于报错添加失败了,Xcode文件列表不会显示你此次 *** 作加入的文件。那么怎么办呢?
这时候建议先 Product-->Clean 清理一下项目文件。然后右击一个与所要添加进入文件同目录下的任意文件,点击 Show in Finder 。接下来发挥mac电脑强大的搜索能力。如下图,搜索刚才因报错加入失败的文件。
就这么一个简单的搜索 *** 作下来,会发现添加失败的文件,已经存在文件夹里了。所以后面不管再怎么添加都是重复添加会直接报错。这时候只需把这些文件 删除 ,再从Xcode 重新添加 即可。
一个简单Xcode使用问题,希望可以帮到第一次遇到这个问题的人。
如何在 Xcode 工程中添加动态库(Dynamic Library)。
首先我们知道,对于 “.a 静态库” 和 “静态 framework”,直接把相关文件拖拽到工程中,并勾选 Copy if needed 选项即可,无需其它额外的设置;
而对于添加“动态 framework”,稍微比较麻烦,主要有以下几种方式。
PS:我们这里说的“添加动态库”是指第三方动态库,而不是像 UIKit.framework、Foundation.framework 或者 libc++ 等系统自带的动态库,对于它们的依赖添加很简单,直接在 General ->Linked Frameworks and Libraries 中点击加号搜索添加即可。
在 Xcode 工程中选中 app 对应的 target,然后在 General ->Embedded Binaries 下点击加号,如图 1,在d出的窗口选择 Add Other…,最后在 Finder 中选择你要添加的“动态 framework”,并勾选 Copy if needed 即可。需要注意的是,你不能直接在 Finder 中把 .framework 文件拖拽到 Embedded Binaries 中,否则会报错。
关于手动添加动态库的更多细节以及遇到问题的解决办法,可参考苹果官方的教程: 《Embedding Frameworks In An App》
但是!这种方式看似很方便,其实有个坑是:我们上一条小集提到,一般动态二进制文件都会包含很多处理器架构,例如:i386, x86_64, armv7, armv7s, arm64 等,然后 Xcode 在编译链接时,对动态二进制文件是直接拷贝到 .ipa 包中,并不会像链接静态库那样筛选掉未用到 architecture,而苹果又不允许把包含 i386, x86_64 等模拟器架构的包上传到 App Store Connect 后台,会报错。因此,我们在打 Release 正式包时往往需要手动通过 lipo 命令或者编写脚本移除掉这些 Invalid Architectures。(除非你的开发工程只通过真机来调试,不准备在模拟器里运行,且添加的动态库刚好又不包含 i386、x86_64)
对于通过 Carthage 集成的第三方库,在 Cartfile 文件中添加好依赖后,然后执行 carthage update 命令会帮我们生成一个个“动态 framework”,例如 AFNetworking.framework、SDWebImage.framework 等,然后把它们拖拽到工程中的 General ->Linked Frameworks and Libraries ,然后在配置相关拷贝脚本和命令,详细可参考 Carthage 的 Quick Start 教程。
这里有个关键 *** 作是,需要在 Xcode 工程的 Build Phases 中添加一个执行脚本(New Run Script Phase),并在脚本中执行如下命令:
如图 2 所示:
该命令的作用大概就是,在打包拷贝动态库时自动帮我们移除掉其中的 i386、x86_64。
同样地,通过 CocoaPods 集成动态库时,也会在工程中自动帮我们添加一个 Shell 脚本用于做这件事,如图 3 中的 [CP] Embed Pods Frameworks,
大家可以自行查阅该 Pods-xxx-frameworks.sh 脚本的内容,里面有个函数 strip_invalid_archs() 就是用于在打包时移除无用的处理器架构,如图 4:
因此,我们可以把自己开发的或者他人提供的动态 framework,通过 CocoaPods 来集成到工程中:创建一个 Pods 私有 git 库(相信大家已经很熟悉了),在 git 库中添加相关动态 .frameworks 文件,然后其 Podspec 文件的写法大致如图 5 所示,最后在你的工程中 pod install 即可。
最后我们思考一个问题:“静态 framework” 和 “动态 framework” 在使用上似乎也没什么不同,而工程添加 “动态 framework” 又比较繁琐,那么在 iOS/macOS 开发中什么情况下会使用动态库呢?
如果您将 Xcode Support Files 文件夹从其他文件夹拖到 Xcode 项目中并且它变成了红色,这可能是因为该文件夹被 Xcode 设置为拷贝到项目中,但是该文件夹的实际位置已经改变了。在这种情况下,您可以尝试以下方法来解决问题:删除红色的 Xcode Support Files 文件夹
首先,您需要从 Xcode 项目中删除红色的 Xcode Support Files 文件夹。在这之前,您可以备份该文件夹以防止数据丢失。
将 Xcode Support Files 文件夹添加到项目中
接下来,您需要将 Xcode Support Files 文件夹重新添加到 Xcode 项目中。在添加文件夹时,确保选中“Create folder references”选项,这将保留文件夹的原始位置,并在项目中创建一个指向该文件夹的引用。
更新项目中的文件路径
如果您在项目中使用了 Xcode Support Files 文件夹中的文件,那么您需要更新这些文件的路径,以便它们能够正确地引用您刚刚添加的 Xcode Support Files 文件夹。在 Xcode 中,您可以使用“Find and Replace”功能来更新所有文件的路径。
重新编译项目
最后,重新编译您的 Xcode 项目并确保没有错误或警告信息。如果您仍然遇到任何问题,您可以尝试重新安装 Xcode 或联系苹果开发者支持团队以获取更多帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)