XCode和Cocoa在开发中使用第三方dylib示例

移动开发 iOS
本文介绍的是XCode和Cocoa在开发中使用第三方dylib示例,首先从他们的区别开始讲解,详细内容,先来看内容。

XCodeCocoa在开发中使用第三方dylib示例是本文要介绍对内容,所谓dylib,就是bsd风格的动态库。基本可以认为等价于windows的dll和linux的so。mac基于bsd,所以也使用的是 dylib

如果你需要引用一个第三方的dylib,在xcode下编译出cocoa程序,在本机上运行是不会出问题的。但是发布出来,给其他用户用,就可能出 问题。因为用户不一定有这个库。解决方法是:

1、otool -L yourapp.app/Contents/MacOS/yourapp

这一步的意思是对你编译出的app使用otool命令,以便获得依赖哪些dylib的信息。注意这个路径。cocoa的app在命令行下表现为目 录。所有相关的东西都在里面。

结果如下所示:

  1. yourapp.app/Contents/MacOS/yourapp:  
  2. /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)  
  3. /usr/local/lib/lib01.dylib (compatibility version 0.0.0, current version 0.1.0)  
  4. /usr/local/lib/lib02.dylib (compatibility version 0.0.0, current version 0.1.0)  
  5. /usr/local/lib/lib03.dylib (compatibility version 0.0.0, current version 0.1.0)  
  6. /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)  
  7. /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)  
  8. /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)  
  9. /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)  
  10. /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.0.0)  
  11. /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.12.0) 

注意我标红的地方。假如lib01,lib02,lib03是本程序引用的第三方库,那么在这个程序里面,他们的引用地址是位于/usr /local/lib上的。这是开发机上的安装情况。而使用这个程序的客户机未必安装这些东西,所以程序就要出错。

显然,我们需要做2件事。a 把这些库附带在app上 b 把他们的引用地址修改到正确的位置。

2、mkdir yourapp.app/Contents/dylib

在编译出来的app中,创建dylib目录

然后把所有需要的库复制过去

  1. cp /usr/local/lib/lib01.dylib yourapp.app/Contents/dylib/  
  2. cp /usr/local/lib/lib02.dylib yourapp.app/Contents/dylib/  
  3. cp /usr/local/lib/lib03.dylib yourapp.app/Contents/dylib/ 

3、install_name_tool -change /usr/local/lib/lib01.dylib @loader_path/../dylib/lib01.dylib "yourapp.app/Contents/MacOS/yourapp"

install_name_tool 是苹果提供的用来修改dylib安装名称的命令。这个命令执行之后,再用otool -L 就可以看到变化了

  1. yourapp.app/Contents/MacOS/yourapp:  
  2. /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)  
  3. @loader_path/../dylib/lib01.dylib (compatibility version 0.0.0, current version 0.1.0)  
  4. /usr/local/lib/lib02.dylib (compatibility version 0.0.0, current version 0.1.0)  
  5. /usr/local/lib/lib03.dylib (compatibility version 0.0.0, current version 0.1.0)  
  6. /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)  
  7. /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)  
  8. /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)  
  9. /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)  
  10. /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.0.0)  
  11. /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.12.0) 

注意标红的位置。已经变化了。@loader_path 指的是应用程序运行的位置,也就是yourapp.app/Contents/MacOS/yourapp,所以要用一个..,以便定位到第2步创建的 dylib目录。
重复这个命令,修改lib02,lib03

4、otool -L yourapp.app/Contents/dylib/*.dylib

继续用otool 来检查dylib下面使用的第三方库是否还有其他依赖,install_name是否正确,重复1,2,3的步骤,把所需要的dylib复制过来,修改 install_name。

如果都改对了,那么这个app就附带上了dylib,可以在其他机器上正确运行了,不用非要寻找/usr/local/lib下面的库了。

刚才我们修改的结果是一个build的结果。当然,每次build都这么折腾一下很麻烦。所以继续这样做:

1、前面的步骤得到了一个完整的dylib目录。把这个dylib复制一份备用。比如放在你的xcode项目下面。

2、编写一个脚本:

  1. mkdir "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/dylib"  
  2. cp -f /your/path/to/xcode_project_name/dylib/*.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/dylib/"  
  3. install_name_tool -change /usr/local/lib/lib01.dylib @loader_path/../dylib/lib01.dylib "
  4. $TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME"  
  5. (用这个格式重复前面对app使用过的dylib) 

3、在xcode中,展开targets节点,右键点工程名称,在菜单中选Add->New Build Phasa->New Run Script Build Phasa,在打开的对话框里面,把刚才的脚本贴进去。如图所示。

XCode和Cocoa在开发中使用第三方dylib示例

这个脚本会在build之后自动运行。不过我这里有个奇怪的问题,如果Shell里面写了/bin/sh,会报告找不到这个文件(实际上存在),而 让shell为空,反而可以正确的运行shell命令。

如何使用第三方的dylib

经过这些处理,每次编译出来的app就可以拿到其他机器上运行了。可真够麻烦的...

小结:XCodeCocoa在开发中使用第三方dylib示例的内容介绍完了,希望本文对你有所帮助!

转自原文 http://blog.devep.net/virushuo/2009/07/01/xcodecocoadylib.html

责任编辑:zhaolei 来源: 互联网
相关推荐

2013-08-14 09:50:32

iOS类库

2015-11-05 16:44:37

第三方登陆android源码

2015-07-13 13:34:13

ios第三方库xcode插件

2015-07-13 09:48:21

iOS

2014-07-22 10:56:45

Android Stu第三方类库

2010-05-25 11:09:31

SVN工具

2010-08-02 23:20:24

2014-07-23 08:55:42

iOSFMDB

2019-07-30 11:35:54

AndroidRetrofit

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2014-08-13 10:27:23

CocoaPods

2019-09-03 18:31:19

第三方支付电商支付行业

2011-05-11 09:42:53

质量和安全测试

2014-02-10 10:22:33

微信开发者

2009-03-12 15:32:49

WEB开发

2017-12-11 15:53:56

2009-12-31 14:38:34

Silverlight

2016-10-21 14:09:10

2018-05-16 23:05:46

2013-12-24 16:58:28

搜狐
点赞
收藏

51CTO技术栈公众号