iOS開發之靜態庫(三)—— 圖片、介面xib等資原始檔封裝到.a靜態庫
轉自:https://blog.csdn.net/mylizh/article/details/38707175
編譯環境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3)
一、首先將資原始檔打包成bundle
新建工程:File -> New -> Project... -> OS X -> Framework & Library -> Bundle
我們必須藉助於OS X,因為iOS框架中沒有建立Bundle的模板
填寫專案名稱
儲存位置
其實本無需這麼麻煩,bundle的本質是一個目錄,我們完全可以建立一個資料夾,把需要封裝的資原始檔拷貝至該目錄下,將其改成字尾名為bundle即可,然後就可以使用NSBundle提供的介面訪問其內部的資原始檔,當然,也可以通過訪問普通檔案目錄的方法訪問其內部的資源。
此處主要是考慮到有xib檔案的存在,由前面的知識可知,xib是文字檔案,編譯後要被序列化為二進位制的nib檔案,使用時將nib檔案反序列化,就可以正常顯示介面了。而bundle本身是靜態的,其內部的資源包不參與專案的編譯,所以,此處必須建立工程把xib序列化為二進位制的nib,否則的話,直接建立資料夾後改名就可以了。
因此一些輔助檔案(紅色矩形框起的部分)都不需要了,直接刪除即可
有一點一定要十分十分的小心:
刪除上面紅色矩形框中檔案時,可以完全的刪除,因為這些檔案都是我們自己建立的
而刪除下面矩形框中的檔案時,千萬不能“Move to Trash”,只能"Remove References"(刪除引用),因為framework是系統框架的一部分,如果刪除了,下次執行時候,就會報錯。我就犯過這個低階錯誤,從來沒想過系統檔案會被自己刪除,所以也沒往這方面去想,以至於花費了很長時間才解決了問題。
由於我們刪除了plist檔案,所以必須在Build Settings中刪除對它的引用
同樣,也要刪除pch檔案的引用
我們建立專案時選的是OS X中的框架,所以此處需要修改Base SDK為iOS
修改後
設定完畢,現在拷貝資原始檔到專案中來
正是我們需要的兩個圖片檔案,一個xib檔案
一切就緒,按快捷鍵"Command + B"編譯,編譯成功後,Products下面的MyToolsWithAssetsA.bundle由紅色變成了黑色,表示編譯成功
找到生成的bundle所在的目錄
檢視裡面的內容
開啟
正是我們所需要的,xib也被轉化成了nib
二、編譯靜態庫
建立靜態庫
通常,bundle的名稱要和對應的靜態庫或framework相同(也可以不相同),所以此處靜態庫也命名為“MyToolsWithAssetsA”,這就需要和前面的bundle工程存放在不同的目錄,當然,如果不想這麼麻煩,也可以開始給bundle工程起一個其他名字,使用時修改一下。
刪除不需要的檔案
加入我們的檔案
- #import <UIKit/UIKit.h>
- @interface ViewController1 : UIViewController
- @property (strong, nonatomic) UIImageView *imageView;
- @end
- //
- // ViewController1.m
- // MyToolsWithAssetsADemo
- //
- // Created by LZH on 14-8-15.
- // Copyright (c) 2014年 LZH. All rights reserved.
- //
- #import "ViewController1.h"
- #import "BundleTools.h"
- #import <QuartzCore/QuartzCore.h>
- @interface ViewController1 ()
- @end
- @implementation ViewController1
- @synthesize imageView = _imageView;
- - (id)init{
- NSBundle *myBundle = [BundleTools getBundle];
- //self = [super initWithNibName: @"ViewController1" bundle: nil];
- //從bundle中獲取介面檔案
- self = [super initWithNibName: [NSString stringWithUTF8String: object_getClassName(self)] bundle: myBundle];
- if (self) {
- // Custom initialization
- }
- returnself;
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- returnself;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- _imageView = [[UIImageView alloc] initWithFrame: CGRectMake(50, 100, 220, 220)];
- //_imageView.image = [UIImage imageNamed: @"0001.jpg"];
- //從bundle中獲取圖片資源
- _imageView.image = [UIImage imageWithContentsOfFile: [BundleTools getBundlePath: @"0001.jpg"]];
- //給圖片增加圓角
- _imageView.layer.cornerRadius = 20;
- _imageView.layer.masksToBounds = YES;
- _imageView.layer.borderWidth = 3;
- _imageView.layer.borderColor = [UIColor orangeColor].CGColor;
- [self.view addSubview: _imageView];
- }
- - (IBAction)backButton:(id)sender {
- [self dismissViewControllerAnimated: YES completion: NULL];
- }
- @end
- //
- // BundleTools.h
- // MyToolsWithAssetsA
- //
- // Created by LZH on 14-8-15.
- // Copyright (c) 2014年 LZH. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #define BUNDLE_NAME @"MyToolsWithAssetsA"
- @interface BundleTools : NSObject
- + (NSString *)getBundlePath: (NSString *) assetName;
- + (NSBundle *)getBundle;
- @end
- //
- // BundleTools.m
- // MyToolsWithAssetsA
- //
- // Created by LZH on 14-8-15.
- // Copyright (c) 2014年 LZH. All rights reserved.
- //
- #import "BundleTools.h"
- @implementation BundleTools
- + (NSBundle *)getBundle{
- return [NSBundle bundleWithPath: [[NSBundle mainBundle] pathForResource: BUNDLE_NAME ofType: @"bundle"]];
- }
- + (NSString *)getBundlePath: (NSString *) assetName{
- NSBundle *myBundle = [BundleTools getBundle];
- if (myBundle && assetName) {
- return [[myBundle resourcePath] stringByAppendingPathComponent: assetName];
- }
- return nil;
- }
- @end
本專案中使用了兩張圖片,一張是直接在xib檔案中指定,另一張手動新增,並從bundle中獲取圖片資源
"Command + B"編譯,分別生成針對模擬器的靜態庫和針對真機的靜態庫
合併
三、建立測試工程
建立iOS下的單檢視模板
工程命名
匯入靜態庫、標頭檔案和bundle資源包
在主介面Main.storyboard上增加一個Button,其響應函式程式碼如下:
- //按鈕響應函式
-
相關推薦
iOS開發之靜態庫(三)—— 圖片、介面xib等資原始檔封裝到.a靜態庫
轉自:https://blog.csdn.net/mylizh/article/details/38707175編譯環境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3)一、首先將資原始檔打包成bundle新建
圖片、介面xib等資原始檔封裝到.a靜態庫
編譯環境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一、首先將資原始檔打包成bundle 新建工程:File -> New -> Project... -> OS X -&g
基於大數據的電影網站項目開發之階段性總結(三)
字符 crc -c ... chown root per edi 第一個字符 一、基礎講解 1. 主機ping不同虛擬機 虛擬機要設置IP地址,ip段是vmware 編輯菜單-->虛擬網絡編輯器 網段, 網關:192.168.XXX.2
嵌入式核心及驅動開發之學習筆記(三) 點燈實驗
完成應用程式通過驅動控制硬體的實現。實驗建立在之前的框架上,我們先實現使用者層與核心層之間的資料互動,驅動程式拿到使用者傳來的指令後,就可以執行點燈的動作了。 應用程式與驅動資料互動 對於驅動程式而言,使用copy_to_user 和 copy_from_user
三.linux開發之uboot移植(三)——.基礎之shell和Makefile回顧
一.補基礎之shell 1.shell程式執行的執行有多種方法,這裡介紹三種方法: 第一種:./xx.sh,和執行二進位制可執行程式方法一樣。這樣執行shell要求shell程式必須具有可執行許可權。chmod a+x xx.sh來新增可執行許可權。 第二
Revit二次開發之技能篇(三)———窗體的實現
在Revit中很多時候,都需要使用者輸入相關的資料,然後再進行程式的執行。在Revit中如何實現窗體呢?請看以下程式碼: ParkingForm frmDlg = new ParkingForm(); frmDlg.ShowDia
iOS開發多線NSThread(三)
- (IBAction)downloadImageClick:(id)sender { BOOL result = [NSThread isMainThread]; NSLog(@"downloadImageClick%d",result); NSThread *thread = [[
python web開發 之 flask教程(三)
今天的任務是應用web表單,知識點很多。我們將程式碼和具體步驟進行展示。(在這個部分,程式碼部分紅色部分是我們增刪的部分) 。 1.我們採用的是Flask-WTK框架。 Flask-WTF是WTFor
iOS開發之基礎篇(14)—— Block
版本 Xcode 9.1 block簡介 block是一個OC物件,於iOS4開始引入。其本身封裝了一段程式碼,可被當作變數、當作引數或作為返回值。block常用於GCD、動畫、排序及各類回撥傳值中。 block程式碼結構圖 注:圖片來自
iOS開發之cocoapods安裝(2017)
因為淘寶的映象不在維護了,所以最近看到一篇2107年的cocoapods安裝部落格Mark一下 第一步:安裝rvm, 不管需不需要升級ruby,rvm可以讓你擁有多個版本的Ruby,並且可以在多個版本之間自由切換。如果已經安裝過跳到第2步(rvm -v 檢視是否安
iOS開發——單例模式(singleton)解決音樂播放器等開發中問題
開發中很多時候需要一個全域性的東西,保證全域性僅有一份即可,這個時候單例是最佳的選擇。 單例模式:在程式執行過程,一個類只有一個例項,無論如何程式執行過程中只有一份例項。 音樂播放器中就需要這種單例
爬蟲庫之BeautifulSoup學習(三)
子節點 rom lac repr 文檔 strong 爬蟲 time contents 遍歷文檔樹: 1、查找子節點 .contents tag的.content屬性可以將tag的子節點以列表的方式輸出。 print soup.body.cont
Hive學習之路 (三)Hive元數據信息對應MySQL數據庫表
需要 pri from metastore node rom lazy 測試 安裝 概述 Hive 的元數據信息通常存儲在關系型數據庫中,常用MySQL數據庫作為元數據庫管理。上一篇hive的安裝也是將元數據信息存放在MySQL數據庫中。 Hive的元數據信息在MySQ
測試開發系列之Python開發mock接口(三)
有一個 cep 內置 stat 遊標 tab lB 端口號 HERE 於進入主題了,前面的準備工作都已經做好了,下面就開始寫邏輯的代碼了,代碼我已經寫好了,每行都加了註釋,不明白的可以留言。 1 2 3 4 5 6 7 8 9 10 11 12 13
C++標準庫(三)之STL算法
out section 區間 and include pla sort 不同 重復元素 算法頭文件: #include<algorithm> #include<numeric> 算法簡介:STL算法采用覆蓋模式而非安插模式,所以調用者必須保證有足夠
python 實戰之模仿開發QQ聊天軟體(三)TCP/IP伺服器與客戶端建設
無論是p2p還是c/s還是b/s,只要用到通訊,必然是要用到今天寫的這個。 TCP/IP是網路軟體最核心的部分,缺少這個你只能當做單機遊戲玩。 TCP/IP,只需要搞清楚udp和tcp這兩個就可以了。 兩者的區別在於 udp每次傳送資訊都需要傳送ip和埠號,可以比
ios開發之人臉識別(給眼睛打上馬賽克)
#import "ViewController.h" @interfaceViewController () @end @implementationViewController - (v
從零開始學C++之IO流類庫(三):檔案的讀寫、二進位制檔案的讀寫、檔案隨機讀寫
#include <cassert>#include <iostream>#include <fstream>#include <string>using namespace std;struct Test { int a; int b; };i
機器學習之整合學習(三)AdaBoost演算法scikit-learn庫
一、AdaBoost類庫概述 scikit-learn中AdaBoost類庫比較直接,就是AdaBoostClassifier和AdaBoostRegressor兩個,從名字就可以看出AdaBoostClassifier用於分類,AdaBoostRegr
軟體開發過程學習筆記(三)之概要設計說明書模板
1 引言 本設計書主要是基於以下目的編寫: 1、對系統概要設計的階段任務成果形成文件,以便階段驗收、評審,最終的文件驗收。 2、對需求階段的文件再次確認過程,對前一階段需求沒有做充分或錯誤的提出修改。 3、明確整個系統的功能框架和資料庫結構,為下一階段的詳細設計、編碼、和