我有一个现有的iOS应用程序,想要添加一个大块的代码,我一直在开发的另一个项目,只是为了方便测试.新的区块主要处理将图像保存到各种共享服务等.因为共享代码需要大量的测试和将来的更新,所以我想知道将该代码块合并到我现有的应用程序中的最佳方式是什么.

我不知道它应该是静态库、动态库还是框架,老实说,我不确定它们之间的区别是什么,或者我应该如何在Xcode中进行设置.

我所知道的是,我需要/想要为共享代码保留一个单独的测试和更新应用程序,并让主要应用程序使用它.

推荐答案

首先,一些一般定义(针对iOS):

Static library-编译时链接的代码单位,它不会更改.

但是,iOS静电库允许包含图像/资源(仅限代码).不过,你可以通过使用media bundle来绕过这个挑战.

一个更好、更正式的定义可以在维基百科 here上找到.

Dynamic library-may更改的在运行时链接的代码和/或assets资源 的单元.

然而,只有苹果公司被允许为iOS创建动态库.你不允许创建这些,因为这会导致你的应用被拒绝.(参见其他this篇SO帖子,以确认和解释此类问题).

Software Framework-完成任务的编译代码集...因此,实际上可以有static frameworkdynamic framework,它们通常只是上面的编译版本.

有关更多详细信息,请参阅Wiki on Software Framework.

因此,在iOS上,您唯一的 Select 基本上就是使用静电库或静电框架(主要区别在于静电框架最常以编译后的.a个文件的形式分发,而静电库可能只是作为一个子项目包含在内--您可以看到所有代码--它是首先编译的,其结果是.a个文件被项目用作依赖项).

现在我们已经明确了这些条款,为iOS建立一个静电库和支持媒体包并不是太难,而且有很多教程可以教你如何做到这一点.我个人推荐这个:

https://github.com/jverkoey/iOS-Framework

这是一个相当直截了当的指南,没有处理"假静电图书馆"的缺点……请查看它以了解更多信息.

一旦创建了静态库,就可以轻松地将其包含在Git中,以便在不同的项目中使用.

祝好运.

EDIT

关于项目中的subproject,据我所知,要使其正常工作/编译,基本上必须设置一个编译链,首先在其中编译子项目,这将创建一个静电框架.a文件,该文件被项目用作依赖项.

下面是另一个讨论这一点的有用教程:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

从iOS8开始,苹果现在允许开发者创建动态框架!(注意:您的应用程序必须至少有iOS8目标才能包含动态框架……不允许反向移植.)

此项目已添加为新的项目模板.在Xcode 6.1中,可以在以下位置找到:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework

Ios相关问答推荐

SwiftUI SF Symbols图像:暗模式图像

如何修复使用EFCore和SQLite的.Net MAUI iOS应用程序上的当前应用程序不支持NullabilityInfoContext?

从后台线程调用DispatchObject的方法安全吗?

SwiftUI绑定到特定的一个或多个枚举 case

安装新版本 XCode 15.0 后无法运行应用程序 XCode

分配给指针会通过 class_addMethod 导致 EXC_BAD_ACCESS

如何结合`@dynamicMemberLookup`和`ExpressibleByStringInterpolation`来实现方法链?

圆角矩形路径上的蛇形动画

为什么常量属性可能在 Swift 类中被初始化两次?

如何解码没有名称的 JSON 数组?

如何为视图的 colored颜色 和宽度设置动画?

async/await、Task 和 [weak self]

光标未显示在 UITextView 中

如何设置imageView的圆角半径?

iOS 11 navigationItem.titleView 宽度未设置

当键盘出现在 iOS 中时,将 UIView 上移

如何获取 iTunes 连接团队 ID 和团队名称?

如果我的分发证书过期会怎样?

Info.plist 实用程序错误:无法打开 Info.plist,因为没有这样的文件

我可以在 UIScrollView 中使用 UIRefreshControl 吗?