一、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. 「CF630C」Lucky Numbers

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description The numbers of all offices in the new ...

  2. Mac下配置nacos开机启动

    nacos能正常启动后,开始制作启动app. 1.打开自带的 自动操作 2.点击选项 3.选择应用程序 4.搜索shell,点击运行Shell脚本,写入脚本,$NACOS 为nacos的绝对路径,保存 ...

  3. Linux下RIAD的实现及mdadm命令的基本用法

    一.RAID简述 磁盘阵列(Redundant Arrays of Independent Disks,RAID),是把多个物理磁盘组成一个阵列,当作一个逻辑磁盘使用,它将数据以分段或条带的方式储存在 ...

  4. Java面向对象程序设计第15章5

    5. 利用URLConnetction对象编写程序返回某网站的首页,并将首页的内容存放到文件当中. import java.net.*; import java.io.*; public class ...

  5. postgresql , etcd , patroni 做failover

    os: centos 7.4etcd:3.2 主从IP信息192.168.56.101 node1 master192.168.56.102 node2 slave192.168.56.103 nod ...

  6. B0宏

    在编译android平台用的ffmpeg时,抛出这样一个错误: 这句代码怎么看都找出有毛病,为什么B0会报错? 翻看aaccoder.c,也没有发现问题.为什么B0就成了一个常量数字,这里只有一个可能 ...

  7. gcc在x64体系中如何传递参数,linux,mac,iOS适用

    上一篇介绍了vc(windows)平台在x64体系当中,c函数的传参方式.本篇将要介绍gcc(类linux,mac)平台在x64中,c函数是如何传参的.为节约时间和篇幅,首先来定义一个有十个参数的函数 ...

  8. markdown总结 (webstrom快捷键)

    # 在HbuilderX中写markdown(WebStrom快捷键配置)0. 一些快捷键和鼠标操作:1. ctrl+shift+↑  当前行或者选中的块整体向上移动  ↓同理2. 向两侧扩大选择:A ...

  9. 学习记录:《C++设计模式——李建忠主讲》4.“单一职责”模式

    单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式:装饰模式(Decorator).桥 ...

  10. CSS如何设置列表样式属性,看这篇文章就够用了

    列表样式属性 在HTML中有2种列表.无序列表和有序列表,在工作中无序列表比较常用,无序列表就是ul标签和li标签组合成的称之为无序列表,那什么是有序列表呢?就是ol标签和li标签组合成的称之为有序列 ...