标签:
将Reveal加入您的Xcode工程,使得您团队中的其他成员无需任何额外的配置,就可以使用Reveal。
警告: 永远不要将包含Reveal动态库文件的应用正式发布。Apple不允许将含有动态加载库文件的iOS应用发布到Apple商店中。
在Xcode中打开您的iOS工程。
启动Reveal并选择__Help → Show Reveal Library in Finder__,这将会打开Finder窗口,并显示一个名为*iOS-Libraries*的文件夹。
将 libReveal.dylib 文件拖入Xcode中的Project Navigator面板。
在下图所显示的__Add to targets__对话框中,__反选所有的target__。这确保了Xcode不会在编译时连接动态库文件。可选步骤:选中__Copy items if needed__,将会把 libReveal.dylib 拷贝到工程中——如果您这么做了, 请记住,当更新Reveal至新版本时,也依照上述步骤再次更新此库文件。
点击**Finish**。
在Xcode的Project Navigator中,选中您的工程,然后将以下步骤应用在所有您希望适配Reveal的target之上:
为了能在debugger之外,将库文件动态地载入设备上的应用,您需要在构建过程中加入对libReveal.dylib文件的code sign。
进入target的__Build Phases__标签页,选择__Editor → Add Build Phase → Add Run Script__菜单。在Run Script阶段中加入以下内容:
set -e
if [ -n "${CODE_SIGN_IDENTITY}" ]; then
codesign -fs "${CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/libReveal.dylib"
fi
将下面的代码加入到项目中合适的类文件中(例如您的UIApplicationDelegate
),适当修改使之满足您的需要:
Swift:
// MARK: - Reveal
func loadReveal() {
if NSClassFromString("IBARevealLoader") == nil {
let revealLibName = "libReveal"
let revealLibExtension = "dylib"
var error: String?
if let dylibPath = NSBundle.mainBundle().pathForResource(revealLibName, ofType: revealLibExtension) {
println("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 {
UIAlertView(title: "Reveal library could not be loaded",
message: "\(revealLibName).\(revealLibExtension) failed to load with error: \(error!)",
delegate: nil,
cancelButtonTitle: "OK").show()
}
}
}
Objective-C:
#pragma mark - Reveal
#import <dlfcn.h>
- (void)loadReveal
{
if (NSClassFromString(@"IBARevealLoader") == nil)
{
NSString *revealLibName = @"libReveal";
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];
[[[UIAlertView alloc] initWithTitle:@"Reveal library could not be loaded" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}
}
}
警告: 不要在发布(release)构建中调用此方法,确保仅是在应用的调试(debug)构建中加载*libReveal.dylib*。
一个简单的集成方式是,在-[UIApplicationDelegate application: didFinishLaunchingWithOptions:]
方法中调用上面声明的- (void)loadReveal
方法,以确保Reveal库尽早地被加载进来。
Swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.loadReveal()
return true
}
Objective-C:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self loadReveal];
return YES;
}
提示: 在
-[UIApplicationDelegate application: didFinishLaunchingWithOptions:]
方法返回之前加载库的一个好处是,将会让Reveal服务在应用启动的同时也自动启动。
如果您不希望如上述步骤自动启动Reveal服务,也可以以手动的方式来启动,例如通过一个Debug按钮。在应用启动后,自己调用loadReveal
方法,然后再分发一个名为IBARevealRequestStart
的NSNotification
:
Swift:
func startReveal() {
NSNotificationCenter.defaultCenter().postNotificationName("IBARevealRequestStart", object: nil)
}
Objective-C:
- (void)startReveal
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
}
在Xcode中,选择基于**Debug**配置的scheme,构建并运行您的应用。
如果一切正常运行,请切换到Reveal应用,此时您的应用应会出现在应用选择器的下拉列表当中。选中您的应用,确认可以看到此时正在模拟器(或设备)中运行的应用界面截图。
官网地址:http://support.revealapp.com/kb/getting-started/revealrevealxcode
标签:
原文地址:http://www.cnblogs.com/zhao-jie-li/p/5123585.html