你应该如何在iPhone上制作(和使用)静态库

时间:2009-10-14 00:05:53

标签: iphone xcode dynamic static

AFAICS,任何严肃的iPhone开发者必须定期制作和使用静态库,否则就会谴责自己的错误,难以维护,笨拙的项目。但Apple拒绝提供任何关于该过程的官方文档(只是循环引用:“不做静态,使用动态!...我们不允许在iPhone上动态,使用静态!”)

我花了6个多月的时间试验这个;我已经在App Store上的多个iPhone应用程序中部署了静态库;我想出了一个基于通用二进制文件的漂亮的工作系统......当OS 3.x出现时,它立刻就会被打开(LOL); ...我现在有一个适用于所有版本的iPhone OS的新系统。

我已经在这个主题上阅读了关于StackOverflow的相关问题,他们要么不能完全使用静态库,要么你需要使用一个或多个外部命令行工具,因此打破了IDE。如果你无法让一切都在其中运作,那么IDE有什么意义呢?

我找到了一种完全适用于Xcode的方法。但根据过去的经验,我真的很紧张......

我希望这次能有一些反馈 - 最后! - 通过反复试验,我实际上做对了。

或者...... 甚至更好 ...我很想找到一个会告诉我你应该如何“应该”去做的人,Apple期望/想要/要求你做什么它

我的过程非常复杂,我把它写成了两篇博文:

  1. 第一篇文章:basic assumptions and problems
  2. 第二篇文章:methodology, and step-by-step process
  3. 请注意:我应该知道许多关于iPhone和Cocoa编程的事情;我知道我正在做的事情有很多不妥之处,但我宁愿分享它,可能会大声喊叫而不是保持安静,永远不会知道我搞砸了什么。

    思考?改进?或者甚至......我是一个完全傻瓜,而且有一条更加轻松的路线让我在我的所有搜索中都没有注意到它?

    提前致谢...

4 个答案:

答案 0 :(得分:3)

您可能会发现本教程对最近完成此操作的人很有用:

http://kyleroucis.com/Kyle_Roucis/Blog/Entries/2009/10/7_Custom_Embedded_Static_Library_for_iPhone.html

答案 1 :(得分:1)

我错过了一些东西,因为我没有在我自己的静态库中包含任何类别:

如果使用类别,则必须包含链接器标志“-ObjC”,否则当您尝试在项目中使用时,静态库将“丢失”某些部分。

我听说有人把这面旗帜放在6个不同的地方,但似乎为我工作的那个是:

在库项目中(奇怪的是不是app项目),转到构建设置,并添加用户定义的设置:

OTHER_CFLAGS = -DObjC

......虽然我认为应该改为:

其他链接标志= -ObjC

(注意:这有在GUI内自动设置OTHER_CFLAGS的副作用)

另外,我听说很多人声称它应该进入应用程序项目,但是他们都将他们的项目嵌入到一起,而不是编译真正的静态库,所以我怀疑他们很幸运。

另外......

XCode / Iphone OS 3.0似乎有一个错误,你还需要-all_load标志(与上面的-ObjC标志完全一样)。有一些StackOverflow关于-all_load标志与3.0一起使用的问题,所以看看它们以获取更多信息 - 我对此并不十分熟悉。

答案 2 :(得分:0)

关于如何打包结果的一些更有用的建议:

Can you reference Xib files from static libraries on the iPhone?

NB:有趣的是,该评论的作者说他们无法使用捆绑包来处理静态库。我也尝试过,当我发现Frameworks不起作用时,却发现Xcode / iPhone SDK是硬编码的,以防止你以这种方式使用捆绑包:(。我认为这可能只是我的错误,但如果是其他人已经尝试过但也失败了,那么也许不是。

答案 3 :(得分:0)

很抱歉迟到了,但我最近帮助创建了一个静态库,以便人们可以在iPhone OS上使用我的数据结构库。请参阅http://cocoaheads.byu.edu/code/CHDataStructures并查看Subversion,了解我是如何创建静态库的。我没有遇到创建模拟器友好版本的麻烦,但它可以在设备上运行并且不是非常复杂。