安裝Reveal的三種方式
一、靜態鏈接(最簡單快捷地啟用Reveal檢視的方式)
警告: 不要將Reveal庫文件隨著正式應用一起發布。 下面的步驟將會展示如何通過構建配置,而把Reveal靜態庫文件,僅連接到調試構建的流程中。
1、啟動Reveal并選擇Help → Show Reveal Library in Finder,這將會打開Finder窗口,并顯示一個名為iOS-Libraries的文件夾。Show Reveal Library in Finder(圖1)
將 Reveal.framework 文件(圖2)拖入你的項目中。
圖1
圖2
2、在下圖所顯示的Add to targets對話框中,選擇所有您希望與Reveal集成的target。可選步驟:選中Copy items if needed,將會把 Reveal.framework 拷貝到工程中——如果您這么做了, 請記住,
當更新Reveal至新版本時,也依照上述步驟再次更新此庫文件
。
3、在Xcode的Project Navigator中,選中您的工程,然后將以下步驟應用于所有您希望與Reveal集成的target之上:
1)選擇Build Phases標簽,如果在Link Binary With Libraries配置項中已有Reveal.framework,請將其移除。
2)選擇Build Settings標簽,在Other Linker Flags的Debug配置項中加入如下配置:
-ObjC -lz -framework Reveal
4、如果一切正常運行,請切換到Reveal應用,此時您的應用應會出現在應用選擇器的下拉列表當中。選中您的應用,確認可以看到此時正在模擬器(或設備)中運行的應用界面截圖。
成功鏈接項目:
TIP:再次運行您的應用,這一次,請選擇基于**Release**的scheme。請確認此時,Reveal不再能連接上您的應用。如果應用仍然與Reveal保持連接,請確認 Reveal.framework 沒有出現在**Build Phases**標簽的**Link Binary With Libraries**配置項中
二、動態鏈接不添加庫(推薦使用)
1、將Reveal加入您的Xcode工程
2、集成Reveal:不修改您的Xcode工程并加載Reveal(僅能運行在模擬器)
此方法的好處:通過不修改Xcode工程文件來加載Reveal的方式,您可以檢視任何一個您正在開發的iOS應用,而不需要對這些應用的工程做任何修改。另一個好處就是,您不需要再擔心,犯下一不小心將Reveal庫連接到應用中發布了的錯誤。
1)打開您的iOS工程,選擇 View → Navigators → Show Breakpoint Navigator。
2)在面板左下角,點擊 + 按鈕并選擇Add Symbolic Breakpoint。
3)在 Symbol 輸入區內輸入 UIApplicationMain(不可有空格)
4)點擊 Add Action 按鈕, 確認 Action 被設置為 Debugger Command
5)將以下內容拷貝到 Action 的輸入區內:
expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)
注意: 請確認Reveal.app的路徑信息符合您Mac的實際位置。位置不正確不能正常使用Reveal。
6)選中 Automatically continue after evaluating actions 選項
7)右擊剛才新創建的斷點,選擇 Move Breakpoint To → User
您可以像其他斷點一樣,禁用或啟用此斷點。用戶級別斷點在所有的Xcode工程中都可以使用
8)在iOS模擬器上構建并運行您的應用
如果一切正常運行,請切換到Reveal應用,此時您的應用應會出現在應用選擇器的下拉列表當中。選中您的應用,確認可以看到此時正在模擬器中運行的應用界面截圖。
三、動態鏈接添加庫
添加Reveal到你的Xcode項目允許你團隊中所有的成員不用再配置Reveal就可以使用Reveal。
Warning:永遠不要在你的發布版本中集成Reveal動態庫。Apple不允許通過在APP store下載的APP含有動態庫。
1、代開你Xcode中的iOS或者tvOS項目
2、打開Reveal點擊導航欄的Help->Show Reveal Library in Finder選項選擇iOS Library
或者tvOS Library
。這回打開一個帶有相應的framework的文件管理窗口。
3、將libReveal.dylib(or libReveal-tvOS.dylib for tvOS apps)拖進你的Xcode項目中。
4、在拖入Xcode Library的對話框中,選擇所有的targets。這樣會確保Xcode在編譯的時候不會鏈接動態庫。選項Copy items if needed
是可選的,如果你選擇了這一項你需要注意當Reveal更新的時候你要更新這個library。
5、點擊finish
6、在Xcode的導航欄中,選擇你想使用Reveal的target
- 選擇
Copy Bundle Resource
這一項,添加libReveal.dylib(or libReveal-tvOS.dylib for tvOS apps) - 需要在
Link Binary with Libraries
做的:
1)移除libReveal.dylib和libReveal-tvOS.dylib如果它們存在的話,
![Uploading 屏幕快照 2016-07-26 下午9.29.14_861591.png . . .]dylib不應該在編譯的時候被鏈接
2)添加如下的系統框架和庫如果它們不存在的話libz.tbd, CFNetwork.framework, QuartzCore.framework, 和 CoreGraphics.framework
7、為了當一個應用運行在模擬器時動態加載這些庫,你需要在libReveal.dylib添加一些代碼當在程序構建的過程中。
在你的target
Bulid Phases
這一項選擇Editor->Add Bulid Phase ->Add Run Script,編輯運行腳本:
iOS targets:
set -e
if [ -n "${CODE_SIGN_IDENTITY}" ]; then
codesign -fs "${CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/libReveal.dylib"
fi
tvOS targets:
set -e
if [ -n "${CODE_SIGN_IDENTITY}" ]; then
codesign -fs "${CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/libReveal-tvOS.dylib"
fi
8.在你的項目中尋找一個合適的類添加下面的代碼(eg:UIApplicationDelegate
),并且可以根據你的需求更改代碼:
swift:
// MARK: - Reveal
func loadReveal() {
if NSClassFromString("IBARevealLoader") == nil {
let revealLibName = "libReveal" // or "libReveal-tvOS" for tvOS targets
let revealLibExtension = "dylib"
var error: String?
if let dylibPath = NSBundle.mainBundle().pathForResource(revealLibName, ofType: revealLibExtension) {
print("Loading dynamic library \(dylibPath)")
let revealLib = dlopen(dylibPath, RTLD_NOW)
if revealLib == nil {
error = String(UTF8String: dlerror())
}
} else {
error = "File not found."
}
if error != nil {
let alert = UIAlertController(title: "Reveal library could not be loaded",
message: "\(revealLibName).\(revealLibExtension) failed to load with error: \(error!)",
preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
UIApplication.sharedApplication().windows.first?.rootViewController?.presentViewController(alert, animated: true, completion: nil)
}
}
}
Objective—C:
#import <dlfcn.h>
#pragma mark - Reveal
- (void)loadReveal
{
if (NSClassFromString(@"IBARevealLoader") == nil)
{
NSString *revealLibName = @"libReveal"; // or @"libReveal-tvOS" for tvOS targets
NSString *revealLibExtension = @"dylib";
NSString *error;
NSString *dyLibPath = [[NSBundle mainBundle] pathForResource:revealLibName ofType:revealLibExtension];
if (dyLibPath != nil)
{
NSLog(@"Loading dynamic library: %@", dyLibPath);
void *revealLib = dlopen([dyLibPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW);
if (revealLib == NULL)
{
error = [NSString stringWithUTF8String:dlerror()];
}
}
else
{
error = @"File not found.";
}
if (error != nil)
{
NSString *message = [NSString stringWithFormat:@"%@.%@ failed to load with error: %@", revealLibName, revealLibExtension, error];
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Reveal library could not be loaded"
message:message
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
[[[[[UIApplication sharedApplication] windows] firstObject] rootViewController] presentViewController:alert animated:YES completion:nil];
}
}
}
WARING:你應該確保在你的發布版本中不調用這個方法。你要確保僅在調試版本加載libReveal.dylib這個庫。
9、你可以 -[UIApplicationDelegate applicationDidBecomeActive:]
方法中調用如下方法來確認這個庫以被正確的加載。
Swift:
func applicationDidBecomeActive:(application: UIApplication) {
self.loadReveal()
}
Objective-C:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self loadReveal];
}
NOTE:在-[UIApplicationDelegate applicationDidBecomeActive:返回值之前加載該庫,Reveal 服務將會自動開始啟動。
10、如果你不想自動啟動Reveal服務在上一步,你想通過調試按鈕或者其他的類似按鈕。你只需要在app已經啟動的時候調用loadReveal
這個方法,然后系統會發出一個IBARevealRequestStart
的通知:
Swift:
func startReveal() {
NSNotificationCenter.defaultCenter().postNotificationName("IBARevealRequestStart", object: nil)
}
Objective-C:
- (void)startReveal
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
}
11、在Xcode中構建并運行你的項目,如果一切順利,你應該可以切換你的iOS項目在Reveal的下拉列表中。選擇你的app然后驗證看一下是否可以看到和你的模擬器一樣的畫面。