此文真正写于2011年4月,当时是xcode3.X版本。xcode4的路径会不同,方法请查看 Xcode4.6创建和使用iOS的dylib动态库。
文中提到的压缩文件在此下载http://download.csdn.net/detail/hursing/5159352
1. 用Xcode同时打开两个文件
“/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec”
“/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneOSProductTypes.xcspec”
在“MacOSX Product Types.xcspec”中找到Identifier为com.apple.product-type.library.dynamic的Item,拖拽添加到“iPhoneOSProductTypes.xcspec”的root下。(模拟器版类似)
2.用Xcode同时打开两个文件
“/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Package Types.xcspec”
“/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneOS PackageTypes.xcspec”
在“MacOSX Package Types.xcspec”中找到Identifier为com.apple.package-type.mach-o-dylib的Item,拖拽添加到“iPhoneOS PackageTypes.xcspec”的root下。
3.解压Cocoa Touch Dynamic Library.zip放到/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Library/
这是动态库的project模板,其实质是把由静态库模板创建的项目文件$ProjectName/ProjectName.xcodeproj/project.pbxproj中的字符串“com.apple.prodcut-type.library.static”改成了“com.apple.prodcut-type.library.dynamic”。
4.解压Dynamic Library.trgttmpl.zip放到/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Target Templates/Cocoa Touch/
这是动态库是target模板。
5.完成以上四步即可开始创建dylib。开始前需要确保退出一次Xcode再继续。
选择Xcode->Create a new Xcode project->iOS->Library->Cocoa Touch Dynamic Library创建动态库,随意添加类和函数。要注意,必须在Groups & Files/Targets/$ProjectName的Info面板(双击该Target即会打开这个面板),把Installation Directory一栏改成@executable_path/。目的是修改加载路径为可执行目录。否则加载此dylib的app会在原路径/usr/local/lib中寻找此dylib,导致dlopen返回错误信息“image not found”。
6.随意创建一个app project。
Add->Existing Frameworks,选择生成的dylib加入到project中,并把dylib添加到Targets/$ProjectName/Copy Bundle Resources。这样dylib就会被打包到app中。
注意:App的Release版必须在Target的Info面板中把Strip Debug Symbols During Copy一栏的取消打钩。否则程序一运行即会崩溃。暂时不知道原因。Debug版原本就是取消的,所以没问题。
PS:
App可打包为ipa格式,在越狱的机器上测试通过。示例程序在Dylib.zip
一下添加或覆盖四个文件完成前四步。 解压Developer.zip后覆盖/Developer即可