一、bundle 的生成

1、打开XCode,创建iOS版用的bundle资源包,有两种方式:第一种直接将工作,open in  finder.在目录中直接新建文件夹,文件夹以bundle格式。文件夹就会变成通用的Bundle包样式。如此可以看出来bundle其实就是一个文件夹,与文件夹的操作相同。第二种方式是在主目录中,New file...选择iOS-》Resource-》Settings Bundle.

第三种方式,在framework里集成bundle.详见图。选择OS X 的Bundle。因为Xcode7中iOS里没有Bundle.通过修改bundle的属性来试用iOS。

2、在工程里添加你需要的内容 如图片资源等.目录束里面的xib,图片资源等,会自动收录到bundle文件夹中。

3、选择debug 或 release 条件编译Bundle

二、bundle 的使用

1、将制作好的bundle拖曳至项目中

2、使用Bundle中的资源

UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 200, 200      )];

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

NSString *picturrePath =[bundlePath stringByAppendingPathComponent:@"Contents/Resources/fbb01.jpg"];

UIImage *image =[UIImage imageWithContentsOfFile:picturrePath];

imageView.image = image;

[self.view addSubview:imageView];

3、编译工程后,经验证成功使用了bundle中的资源。

Xcode7.3 制作通用的framework 原文地址

http://www.jianshu.com/p/0fed418f228c#

1.新建一个工程.
file→ new→ project, 弹出框中选择iOS→ framework & library中的cocoa touch framework.点击Next,输入product name: TestFramework, 点击Next→ 点击Create.
2.删除向导所生成工程中的Target.

点击工程名→ 点击TARGETS → 右键Delete.

3.增加一个新的Target.

点击Target底部的"+"号,弹出框中选择OS X→ Framework & Library中的Bundle.点击Next,输入product name TestFramework, 点击Finish.

4.修改新建 Target 的 Building Settings 项.

a: 选中TARGET→ Build Settings项, 将Architectures→ Base SDK 改为Latest iOS(iOS 9.0), 将Architectures 改为 $(ARCHS_STANDARD);

b: 在 Deployment项, 选中"Mac OS X Deployment Target", 点击键盘上的Delete键, 将“Targeted Device Family”改成"1,2";

c: 在 (null) - Deployment项, 修改"iOS Deployment Target"为"6.0",同时修改PROJECT的info下的Deployment Target → "iOS Deployment Target"为"6.0";

d: 在Linking项, 将"Dead Code Stripping" 改为"NO", "Link With Standard Libraries" 改为 "NO", 将 "Mach-O Type" 改为"Relocatable Object File";

f: 在Packing项, 将"Wrapper Extension" 改为 "framework";

5.修改 Target 的 Info 项.

点击Info, 将 "Bundle OS Type code" 改为 "FMWK"

6.将要写入源码文件拖入工程目录, 这里以一个简单的语句输出作为例子

Command+N 新建一个cocoa Touch class, 名字为TestLog, 点击Next, 点击create;

TestLog.h代码如下:

​#import <Foundation/Foundation.h>
@interface TestLog : NSObject

  • (void)TestLog;
    @end

TestLog.m代码如下:

import "TestLog.h"

@implementation TestLog

  • (void)TestLog
    {
    NSLog(@"这里是静态库输出日志\n");
    }
    @end

7.删除TestFramework.m, 修改TestFramework.h内容如下:

ifndef TestFramework_h

define TestFramework_h

//这里没有提示,一定手打

import <TestFramework/TestLog.h>

endif

8.暴露Headers供外部项目调用接口.
选中Target下的Build Phases, 点击左上角"+"号→ "New Headers Phase", 展开Headers, 点击左下角"+", 选择"TestFramework.h"和"TestLog.h"→ 点击add, 将这两个头文件拖动到上方Public下.

9.然后分别在iOS Device 和 iOS Simulator 下编译.

在Window→ Projects中左边选择TestFramework工程, 点击右边的Derived Data右边的箭头,打开Finder, 在../Build/Products目录下有真机和模拟器生成的TestFramework.framework

10.合并Framework.有两种方式

第一种

打开终端, 输入:

cd /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products, 回车;

可以输入lipo -info XXX 来查看库的信息, armv7 arm64的是真机, X86_64的是模拟器;
输入命令:
lipo -create /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphoneos/TestFramework.framework/TestFramework /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphonesimulator/TestFramework.framework/TestFramework -output NewTestFramework

在Products目录下会生成一个NewTestFramework的文件, 将该文件拷贝覆盖TestFramework.framework目录下的TestFramework文件, 新的TestFramework.framework就是真机和模拟器通用的framework.

第二种

在Build Phases中添加一个RunScript
合并可以通过runScript

if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

open "${DEVICE_DIR}"

open "${SRCROOT}/Products"
fi

bundle 的生成和使用的更多相关文章

  1. Application Loader上传app时报错:the bundle identifier cannot be changed from the current value

    报错如图: 解决:用info.plist中的bundle identifier生成发布证书(Distribution),如图:

  2. webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)

    1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...

  3. 生成一个ipa的包,使非开发机也能安装成功 (Xcode5.1)

    for example: 想为com.apple.cloud的bundle identifier生成一个非开发机也能安装的ipa包.你需要一个apple的企业账号(apple有两种账号:开发者账号和企 ...

  4. 冗余代码都走开——前端模块打包利器 Rollup.js 入门

    之前翻译过一篇文章,介绍了通过 ES2015 的解构赋值语法引入模块,可以让打包工具(browserify)最终编译出来的代码量最小化. 殊不知在 webpack 1.X 版本是无法利用该特性来避免引 ...

  5. 【JavaScript】 Webpack安装及文件打包

    背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...

  6. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  7. Webpack 入门指南 - 1.安装

    Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统 ...

  8. Fragment笔记整理

    前言 一直在用Fragment,但是没有系统的整理过,Google了一下相关文章,看到了几篇,将几篇还不错的文章重点整理了下,很多是直接Copy的,只为做个笔记,以后翻来看比较方便,建议大家看一下下面 ...

  9. 基于 HTTP/2 的全新 APNs 协议

    https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotifi ...

随机推荐

  1. 构建大型 Vue.js 项目的10条建议

    下面是我在开发大型 Vue 项目时的最佳实践.这些技巧将帮助你开发更高效.更易于维护和共享的代码. 今年做自由职业的时候,我有机会开发了一些大型 Vue 应用程序.我所说的这些项目,Vuex stor ...

  2. PHP数组与xml互相转换

    1.数组转xml function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key => $va ...

  3. C++中对C的扩展学习新增语法——引用

    引用 引用的好处: 1.引用的好处 C++使用结构体,不需要再使用 typedef. 2.值传递是将实参进行拷贝,赋值给形参,如果对象比较大,每次拷贝效率比较低,并且函数内部无法修改外部变量的值,能力 ...

  4. 深入理解 PHP 的 7 个预定义接口

    深入理解预定义接口 场景:平常工作中写的都是业务模块,很少会去实现这样的接口,但是在框架里面用的倒是很多.   1. Traversable(遍历)接口 该接口不能被类直接实现,如果直接写了一个普通类 ...

  5. ubantu14.04安装storm伪分布式

    1.安装jdk 安装:sudo apt-get install openjdk-7-jdk 配置: 修改文件 sudo nano /etc/profile , 添加以下内容: 立即执行使之生效: 2. ...

  6. Python3.7.1学习(一):redis的连接和简单使用

    1.python 利用 redis 第三方库 首先安装:pip install redis 2.reids的连接 Redis使用StrictRedis对象来管理对一个redis server 的所有连 ...

  7. 力扣(LeetCode)查找常用字符 个人题解

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表.例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 ...

  8. href=”javascript:void(0);

    href=”javascript:void(0);”这个的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数. 为什么要使用href=” ...

  9. Java虚拟机详解(十)------类加载过程

    在上一篇文章中,我们详细的介绍了Java类文件结构,那么这些Class文件是如何被加载到内存,由虚拟机来直接使用的呢?这就是本篇博客将要介绍的——类加载过程. 1.类的生命周期 类从被加载到虚拟机内存 ...

  10. 快速遍历OpenCV Mat图像数据的多种方法和性能分析 | opencv mat for loop

    本文首发于个人博客https://kezunlin.me/post/61d55ab4/,欢迎阅读! opencv mat for loop Series Part 1: compile opencv ...