`

xcode4.3下制作framework

阅读更多

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

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

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

 

下面教大家一步步制作framework

 

 

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

 

 

 

 

2、         命名项目名称

 



 

 

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



  

 

4、         加载自己的代码

 



 

 

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

 



 

 

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

 



 

 

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

 



 

 

8、         命名类库的名称

 



 

 

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

 



 

 

10、     添加Taget

 



 

 

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

 



 

 

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}"

 



 

 

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

 



 

 

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

 



 
 

 



 

 

15、     选择Taget: HelloWorld进行编译

 



 

 

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

 



 

 

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

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

 




 

 

 

 

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



 

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

  • 大小: 213.3 KB
  • 大小: 236.5 KB
  • 大小: 247.2 KB
  • 大小: 65.6 KB
  • 大小: 219.1 KB
  • 大小: 85.3 KB
  • 大小: 264 KB
  • 大小: 261.4 KB
  • 大小: 61.4 KB
  • 大小: 21 KB
  • 大小: 69.9 KB
  • 大小: 227.5 KB
  • 大小: 37.3 KB
  • 大小: 170.2 KB
  • 大小: 47.6 KB
  • 大小: 193.5 KB
  • 大小: 93.8 KB
  • 大小: 32.5 KB
  • 大小: 150.1 KB
分享到:
评论

相关推荐

    密码保护(xcode4.3)

    Xcode 4.3作为Apple的官方集成开发环境(IDE),用于构建iOS和macOS应用,它提供了多种方式来保护用户的敏感信息,例如应用程序的源代码、证书以及用户数据。在“密码保护”这个主题中,我们将深入探讨如何在Xcode中...

    iphone开发基础教程(Xcode4.3版)

    ### iPhone开发基础教程(Xcode4.3版) #### 知识点概览 本教程主要面向初学者,旨在提供一套全面且易于理解的指南,帮助读者掌握使用Xcode4.3进行iPhone应用开发的基本技能。以下是根据标题、描述、标签及部分...

    基于Xcode4.3的iPhone编程学习笔记 第一篇

    ### 基于Xcode4.3的iPhone编程学习笔记:HelloWorld #### 第一篇:HelloWorld编程 本文档旨在帮助初学者理解如何通过Xcode 4.3环境搭建简单的iOS应用程序,具体以HelloWorld应用为例,从创建工程到运行程序进行...

    基于Xcode4.3的iPhone编程学习笔记

    ### 基于Xcode4.3的iPhone编程学习笔记 #### 第一篇:HelloWorld编程 **概述** 本文档旨在介绍如何通过Xcode 4.3开发环境来进行iPhone应用程序的开发,特别是针对初学者的HelloWorld应用。文档将详细阐述从创建...

    零基础手把手xcode4.3教你做第一个ios app

    ### 零基础手把手Xcode 4.3教你做第一个iOS App #### 工具(Tools) 在开始iOS应用开发之前,首先需要熟悉Xcode 4.3这个集成开发环境(IDE)。Xcode不仅是iOS应用开发的标准工具,也是macOS应用开发的主要工具。...

    xcode4.3 4.4_免证书开发调试并构建ipa.doc

    ### Xcode 4.3 和 4.4 免证书开发调试及构建IPA知识点解析 #### 一、背景介绍 随着iOS开发环境的不断更新和完善,开发者们在进行应用开发时经常会遇到证书与配置文件的问题。为了降低这些复杂性的门槛,部分开发者...

    xcode4.0.2sdk4.3

    xcode4.0.2sdk4.3 xcode4.0.2sdk4.3 xcode4.0.2sdk4.3xcode4.0.2sdk4.3

    Xcode13的XCTAutomationSupport.framework文件

    Xcode13作为最新版本,引入了许多新特性和改进,其中包括`XCTAutomationSupport.framework`。这个框架是Xcode自动化测试的重要组成部分,它为开发者提供了强大的工具来自动化UI测试和进行应用的性能评估。 `...

    xcode4.1/4.2/4.3/4.4真机调试手把手教程

    亲测,MAC 10.7 下xcode 4.3完美破解,可真机调试, MAC 10.8 下 xcode4.4 完美破解,可真机调试

    Xcode15+Swift+制作XCFramework

    本教程将围绕使用Xcode 15和Swift来制作XCFramework进行讲解。 1. **Xcode 15的新特性**: - Xcode 15带来了对Swift 5.5的支持,提供了更好的性能优化和新功能,如Async/Await语法,使得异步编程更加简洁。 - ...

    Xcode8编译xcode9+打包的framework所需FileProvider.framework和IOSurface.framework

    标题提及的“Xcode8编译xcode9+打包的framework所需FileProvider.framework和IOSurface.framework”意味着在使用Xcode 8进行项目编译时,可能会遇到缺少这两个框架的问题。FileProvider.framework和IOSurface....

    XCode 3.2.6 +iOS 4.3 SDK

    这个版本的XCode搭配了iOS 4.3 Software Development Kit(SDK),为开发者提供了构建、测试和发布应用的全套工具。 XCode 3.2.6在iOS开发历史中扮演了重要角色,它支持Objective-C编程语言,Objective-C是苹果平台...

    Xcode iOS 4.3真机调试包

    下载好解压到这个目录: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 重启Xcode。就可以真机调试啦。

    SDK【xcode 4.0.1 + ios sdk4.3】

    标题中的“xcode 4.0.1 + ios sdk4.3”指的是Xcode的4.0.1版本和iOS SDK的4.3版本。这两个组件是紧密相关的,因为Xcode是iOS SDK的主要载体,提供了编写、调试和构建iOS应用所需的环境。 Xcode 4.0.1是一个重要的...

    xcode免证书开发调试并构建ipa

    本文档介绍了一种在Xcode 4.3版本中进行免证书开发调试并构建IPA的方法。这种方法适用于希望简化开发流程、避免苹果官方审核流程的开发者。 #### 一、创建证书 第一步是创建一个自签名证书,用于代码签名。这个...

    iOS Framework制作打包教程

    在MacOSX环境下,Framework是代码和资源的集合,它不仅可以包含代码文件(如.cpp, .m文件),还包括图像、声音、故事板(storyboard)、nib文件等资源。Framework可以被不同的应用程序所共享,它支持代码重用,并且...

    xcode4.0.2andsdk4.3 115网盘下载地址

    xcode4.0.2andsdk4.3 在苹果官网可以下载 但速度就是龟速 4个多g 让人怎么用啊 不知道苹果怎么想的 这段时间我在网上找到了115网盘的下载地址,本人也是用这个地址下载的,要下载的要赶快啊,到期也就还有20多天了...

Global site tag (gtag.js) - Google Analytics