xcode4.3下制作framework

阅读更多

 转自:xcode4.3下制作framework——xcode4.2下也通用)

将自己的类封成库供别人调用,非常方便,就行xcode中的许多类库一样。那么如何制作自己的类库呢?

本人在网上看过很多童鞋的文章,都没有试成功,最后在同事的帮助下搞定。今天有点空闲时间,赶紧记下来,一是跟大家分享,二是怕忘了,今天有同事问我,都感觉有点生了,所以有了这篇文章。

 

下面教大家一步步制作framework

 

 

1、         新建一个项目选择Framwork&Library中的Cocoa Touch Static Library。如图

 
xcode4.3下制作framework_第1张图片
 

 

 

2、         命名项目名称

 


xcode4.3下制作framework_第2张图片
 

 

3、         加载自己要封装的东西


xcode4.3下制作framework_第3张图片
  

 

4、         加载自己的代码

 


xcode4.3下制作framework_第4张图片
 

 

5、         选择设备和模拟器两种方式,编译生成libhello_world.a文件

 


xcode4.3下制作framework_第5张图片
 

 

6、         查看是否生成两个文件

 


xcode4.3下制作framework_第6张图片
 

 

7、         选择Fill——>New——>Taget弹出界面选择Aggregate

 


xcode4.3下制作framework_第7张图片
 

 

8、         命名类库的名称

 


xcode4.3下制作framework_第8张图片
 

 

9、         选择Taget :HelloWorld的Bulid Phases选项卡

 


xcode4.3下制作framework_第9张图片
 

 

10、     添加Taget

 


xcode4.3下制作framework_第10张图片
 

 

11、     点击又下角Add Build Phase,选择Add Run Script。贴上这段脚本

xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build

 

xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build

 


xcode4.3下制作framework_第11张图片
 

 

12、     同样的方法添加另一个脚本,脚本的意思我没有研究,你可以详细看看

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" &&

DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" &&

UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal" &&

UNIVERSAL_LIBRARY_PATH="${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}" &&

FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}.framework" &&

 

# Create framework directory structure.

rm -rf "${FRAMEWORK}" &&

mkdir -p "${UNIVERSAL_LIBRARY_DIR}" &&

mkdir -p "${FRAMEWORK}/Versions/A/Headers" &&

mkdir -p "${FRAMEWORK}/Versions/A/Resources" &&

 

# Generate universal binary for the device and simulator.

lipo "${SIMULATOR_LIBRARY_PATH}" "${DEVICE_LIBRARY_PATH}" -create -output "${UNIVERSAL_LIBRARY_PATH}" &&

 

# Move files to appropriate locations in framework paths.

cp "${UNIVERSAL_LIBRARY_PATH}" "${FRAMEWORK}/Versions/A" &&

ln -s "A" "${FRAMEWORK}/Versions/Current" &&

ln -s "Versions/Current/Headers" "${FRAMEWORK}/Headers" &&

ln -s "Versions/Current/Resources" "${FRAMEWORK}/Resources" &&

ln -s "Versions/Current/${PRODUCT_NAME}" "${FRAMEWORK}/${PRODUCT_NAME}"

 


xcode4.3下制作framework_第12张图片
 

 

13、     点击右下角的Add Build Phase,选择Add Copy Files。在Destination选项中选择Absolute Path,在Subpath路径加载路径:${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal/${PRODUCT_NAME}.framework/Versions/A/Headers

 


xcode4.3下制作framework_第13张图片
 

 

14、     点击“+按钮”,加载你要封装的.h文件

 


xcode4.3下制作framework_第14张图片
 
 

 


xcode4.3下制作framework_第15张图片
 

 

15、     选择Taget: HelloWorld进行编译

 


xcode4.3下制作framework_第16张图片
 

 

16、     然后选择libhello_world.a文件,右键选择Show in Finder。Debug-iphoneuniversal就是生成的framework。

 


xcode4.3下制作framework_第17张图片
 

 

17、     如果Headers文件夹里面为空,则把你封装的.h文件复制到里面,之后就可以在你的程序中使用了。

18、     至此framework制作完成,效果图:

 



xcode4.3下制作framework_第18张图片
 

 

 

 

Technical Q&A QA1490

Building Objective-C static libraries with categories

Q:  Why do I get a runtime exception of "selector not recognized" when linking against an Objective-C static library that contains categories?

A: Why do I get a runtime exception of "selector not recognized" when linking against an Objective-C static library that contains categories?

The "selector not recognized" runtime exception occurs due to an issue between the implementation of standard UNIX static libraries, the linker and the dynamic nature of Objective-C. Objective-C does not define linker symbols for each function (or method, in Objective-C) - instead, linker symbols are only generated for each class. If you extend a pre-existing class with categories, the linker does not know to associate the object code of the core class implementation and the category implementation. This prevents objects created in the resulting application from responding to a selector that is defined in the category.

To resolve this issue, the target linking against the static library must pass the -ObjC option to the linker. This flag causes the linker to load every object file in the library that defines an Objective-C class or category. While this option will typically result in a larger executable (due to additional object code loaded into the application), it will allow the successful creation of effective Objective-C static libraries that contain categories on existing classes. Follow these steps to pass -ObjC to the linker:

  1. In Xcode, double-click the target's name under "Targets" in the Project window.
  2. Choose the Build pane from the ensuing Info window.
  3. Scroll down to the Other Linker Flags build setting under the Linking collection and set its value to -ObjC.

Figure 1  Target Build pane: Other Linker Flags


xcode4.3下制作framework_第19张图片
 

Important: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -all_load or -force_load flags.

 

-all_load forces the linker to load all object files from every archive it sees, even those without Objective-C code. -force_load is available in Xcode 3.2 and later. It allows finer grain control of archive loading. Each -force_load option must be followed by a path to an archive, and every object file in that archive will be loaded.

 

 

Document Revision History

  • xcode4.3下制作framework_第20张图片
  • 大小: 213.3 KB
  • xcode4.3下制作framework_第21张图片
  • 大小: 236.5 KB
  • xcode4.3下制作framework_第22张图片
  • 大小: 247.2 KB
  • xcode4.3下制作framework_第23张图片
  • 大小: 65.6 KB
  • xcode4.3下制作framework_第24张图片
  • 大小: 219.1 KB
  • xcode4.3下制作framework_第25张图片
  • 大小: 85.3 KB
  • xcode4.3下制作framework_第26张图片
  • 大小: 264 KB
  • xcode4.3下制作framework_第27张图片
  • 大小: 261.4 KB
  • xcode4.3下制作framework_第28张图片
  • 大小: 61.4 KB
  • xcode4.3下制作framework_第29张图片
  • 大小: 21 KB
  • xcode4.3下制作framework_第30张图片
  • 大小: 69.9 KB
  • xcode4.3下制作framework_第31张图片
  • 大小: 227.5 KB
  • xcode4.3下制作framework_第32张图片
  • 大小: 37.3 KB
  • xcode4.3下制作framework_第33张图片
  • 大小: 170.2 KB
  • xcode4.3下制作framework_第34张图片
  • 大小: 47.6 KB
  • xcode4.3下制作framework_第35张图片
  • 大小: 193.5 KB
  • xcode4.3下制作framework_第36张图片
  • 大小: 93.8 KB
  • xcode4.3下制作framework_第37张图片
  • 大小: 32.5 KB
  • xcode4.3下制作framework_第38张图片
  • 大小: 150.1 KB
  • 查看图片附件

你可能感兴趣的:(xcode,生成framework,objective-c,cocoa)