一. 静态库.a

1.创建静态库工程 Cocoa Touch Static Libray  ,然后可以创建一个测试视图 TestView

2.暴露头文件 -> Build Phases--> 点左上角+ 加号-> New Header Phase  ,此时下面多了一个行 Headers 文件 ,将需要暴露的头文件拖到 public 中

3. 编译 command+B 后, .a 文件由红色变黑色, 说明编译成功, show in Finder 在文件夹中找到 .a 及头文件

二.静态库. framework (= .a + .h + 资源文件)

更改参数: Build Setting

a. 搜 Linking-->(1)Dead Code Stripping 改为 NO   (2)Mach-O Type 改为 Static Library

b. 在Architectures下增加armv7s,并选中。将Build Active Architecture Only 设置为NO。

c. 公开头文件Headers

1.使用Aggregate方式, 支持多平台

http://blog.csdn.net/tianshats/article/details/52045974

2.使用终端, 合并 模拟器 和 真机 为一个版本

http://www.jianshu.com/p/87dbf57cfe4a  (包含了两种方法)

打开控制台输入
lipo -create
iphoneos下frameworkTest的路径 (空格)simulator下frameworkTest的路径(.framework下一级白色的那个文件)
-output 新的路径,
这样就完成了模拟器和真机版本的合并,新路径下的frameworkTest就是你合并后的文件,将这个文件名字改成和你未合并之前的Test一样的名字,放到framework文件夹下,替换掉原来的frameworkTest文件。
完成后:

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't move temporary file: /Users/maxueshan/Desktop/frame to file: /Users/maxueshan/Desktop/frame.lipo (Is a directory)

这里我们合并的时候会遇到一个error,这是啥原因还真不知道,但是会在和我们-output的文件夹路径并列的地方生成一个 .lipo文件 

我们的操作是按照人家说的把合成后的文件名字改成MyFrameworkTest替换原来的(.framework中的白色文件)。而且,把后缀.lipo去掉!

三. 包文件Bundle (资源文件包)

http://blog.csdn.net/tianshats/article/details/52045974

1.  创建包工程: macOS -> Bundle ->将资源拖入工程中, common+B 编译即可--> show in Finder

2. 资源包只需要编译,不需要安装: target-> Build Setting -> 搜索 install ->(1) skip install 改为Yes  (2)installation Directory 删除安装路径

3.如何使用包文件

(1) 图片:  拼接路径

imageV.image = [UIImage imageNamed:@"XSBundle.bundle/Contents/Resources/2.png"];

(2)图片: 拼接包路径

NSString *bundlePath = [[NSBundle mainBundle]pathForResource:@"XSBundle" ofType:@"bundle"];

NSString *imagePath = [bundlePath stringByAppendingPathComponent:@"Contents/Resources/2.png"];

imageV.image = [UIImage imageWithContentsOfFile:imagePath];

//封装成方法

#pragma mark : - 资源相关

-(UIImage *)getImage:(NSString *)name{

NSBundle *currentBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[TGRefreshOC class]] pathForResource:@"TGRefreshOC" ofType:@"bundle"]];

UIImage *img =  [UIImage imageWithContentsOfFile:[currentBundle pathForResource:name ofType:@"png"]];

return img;

}

(3)xib

NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @ "MyBundle" ofType :@ "bundle"];

NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"vc_name" bundle:resourceBundle];

参考链接整理:

1. xcode 项目引入另一个xcode工程

http://blog.csdn.net/liufangbaishi2014/article/details/50057485

步骤:

a.将你的SDK**工程文件夹拷贝到textSDK 的工程根目录下, 将. xcodeproj蓝色文件 add file...到当前工程目录中

b. Build Phase --> Target Dependencies  --> 点击+ 添加库文件

c.Build Phase  --> Link binary with Libraries--> 点击+ 添加库文件

d.Build Setting -->Search Paths->Header Search Paths中添加上SDK**对应的目录$(SRCROOT)/SDK/SDK就不报错了     最后面设置成 recursive

2.sdk 开发(.a 创建 .framework .bundle 以及脚本运行支持多平台)

http://www.jianshu.com/p/c131baae4307

3.引用. framework 时候遇到的错误

错误一:

dyld: Library not loaded: @rpath/GOPayFramework.framework/GOPayFramework

  Referenced from: /var/containers/Bundle/Application/3E41EEDC-2800-4687-A863-04BB9352508A/TestFramework.app/TestFramework

  Reason: image not found

解决办法: Build phase-> copy file -> 改成 framework ,并添加需要的.framework

http://blog.csdn.net/zzzzzdddddxxxxx/article/details/50495659

4.查看.framework 所支持的平台

为了检查一下我们的多平台编译真的成功了,启动终端,导航到桌面上的framework,像下面一样:

$ cd ~/Desktop/MySDK.framework

$  xcrun lipo -info MySDK

SDK 开发 .a .framework .bundle (xcode引用) 依赖sdk工程的更多相关文章

  1. iOS SDK开发汇总

    以前也做过静态库的开发,不过都是一些简单的调用,最近在做项目的时候,发现其中还有很多问题,所以建个小项目简单记录遇到的问题以及正确的解决办法. 在项目中遇到的问题如下:xib文件获取不到, story ...

  2. 转载-iOS SDK开发

    最近帮兄弟公司的做支付业务sdk,积累了 sdk 封装的经验!下面我会从零开始把我的 sdk 封装和调试经历分享给大家,希望能给看到这篇文章的人有所帮助! 本文我会从以下几个方面来讲述: Framew ...

  3. Sentry 开发者贡献指南 - SDK 开发(事件负载)

    内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...

  4. Xamarin.ios引用第三方SDK

    引言 诚然,Xamarin是个优秀的跨平台解决方案,但毕竟还是不能将Native中所有的方法都直接实现.诸如各种第三方库,也都只有java/oc原生版本的SDK,无法直接拿过来直接使用.但,不能直接拿 ...

  5. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  6. XMPPFrameWork IOS 开发(二)- xcode配置

    原始地址:XMPPFrameWork IOS 开发(二) 译文地址:   Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...

  7. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

  8. Android 主Module引用依赖Module,却无法使用里面的依赖库

    如果模块化开发中遇到 多模块的AndroidManifest.xml没有合并or多模块的资源文件没有合并or模块A include了模块B,而无法使用模块B内依赖的其他aar包中的类的时候or提示Su ...

  9. Android SDK 开发指南

    Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习.   更多视频教程如下: CSDN 融云 Android SDK ...

随机推荐

  1. Apache Derby数据库系统使用方法

    Apache Derby数据库系统使用方法 最近由于项目要求,试用了一下Apache Derby数据库,这里对了解到的内容做一个记录. Apache Derby是一个开源的关系型数据库管理系统,用Ja ...

  2. sql数据库各个版本清除日志

    SQL2005清空删除日志: 复制代码 代码如下: Backup Log DNName with no_log           --'这里的DNName是你要收缩的数据库名,自己注意修改下面的数据 ...

  3. 关于Android使用Instrumentation做功能测试的时候遇到的一个问题

    最近在看测试方面的东西,看到官网上有一个使用Instrumentation做功能测试的例子,自己敲了敲,但是在自己的手机上就是测不过. 经过调试,我发现是我手机上的输入法把输入事件拦截了,需要多输入一 ...

  4. 用C/C++扩展你的PHP

    PHP取得成功的一个主要原因之一是她拥有大量的可用扩展.web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到.PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩 ...

  5. 4-fiddler抓包中文乱码:

    接受到的html被压缩了,要解压,在工具栏有decode

  6. 3-java中String值为空字符串与null的判断方法

    java中String值为空字符串与null的判断方法 2018年01月21日 14:53:45 阅读数:1189 Java空字符串与null的区别 1.类型 null表示的是一个对象的值,而不是一个 ...

  7. 面试题:bootstrap栅格系统

    Bootstrap是一个支持响应式的Css框架它提供了很多组件,如导航条,面板,菜单,form表单,还有栅格,而且他们这些都是支持响应式的,可以在各种设备上进行完美的展现.这里面我感觉最有价值的就是b ...

  8. lnmp+laravel部署到服务器出现 "GET / HTTP/1.1" 500 5

    lnmp一键安装包直接下载安装,就可以了,在此不多说. 虚拟机配置给个参考(lnmp安装包) server { listen 80; #listen [::]:80; server_name www. ...

  9. Controller级别的异常处理过滤器IExceptionFilter

    1,系统自带的HandleErrorAttribute类继承自IExceptionFilter,是MVC的默认实现. 同时设置web.config <system.web> <cus ...

  10. LightOJ 1079 Just another Robbery (01背包)

    题意:给定一个人抢劫每个银行的被抓的概率和该银行的钱数,问你在他在不被抓的情况下,能抢劫的最多数量. 析:01背包,用钱数作背包容量,dp[j] = max(dp[j], dp[j-a[i] * (1 ...