




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/iOS开发笔记- 界面调试神器RevealReveal是iOS开发工具中的神器之一,它能够在应用程序运行过程中调试应用程序界面。通过Reveal我们可以连接到应用程序,并允许开发者编辑各种用户界面参数,结果会马上在用户界面上呈现。就像Web开发人员用浏览器提供的开发人员工具调试页面一样,Reveal允许开发者在不修改代码、不重新构建项目、不重新部署应用程序的情况下就能够调试iOS应用的用户界面。1. 安装RevealReveal下载地址:2. 在项目中集成Reveal集成Reveal无需添加任何代码,无需引入任何头文件。库将会在应用启动时自动加载,并在应用内部启动必要的Reveal服务。下面介绍三种集成方式。2.1 静态连接将Reveal的静态库文件连接入应用,是最简单快捷地启用Reveal调试界面的方式。提示: 不要将Reveal库文件随着正式应用一起发布到App Store。下面的步骤将会展示如何通过构建配置,而把Reveal静态库文件,仅连接到调试构建的流程中。1. 在Xcode中打开您的iOS工程。2. 启动Reveal并选择Help Show Reveal Library in Finder,这将会打开Finder窗口,并显示一个名为iOS-Libraries的文件夹。3. 将Reveal.framework文件拖入Xcode中的Project Navigator面板。4. 在下图所显示的Add to targets对话框中,选择所有您希望与Reveal集成的target。注意,在如下图所示的窗口中选中Copy items if needed,它会把Reveal.framework拷贝到项目中,如果你这样做了,那么当更新Reveal至新版本时,也依照上述步骤更新Reveal.framework文件。5. 点击Finish。6. 选择Build Settings标签,在“Other Linker Flags”的Debug配置项中加入如下配置。-ObjC -lz -framework Reveal 7. 如果您使用的是Xcode 7, 请确认Reveal.framework 所在的目录在您的工程配置项“Framework Search Paths” 中。你可以在如下图所示的位置添加下面的内容。$(inherited)$(SYSTEM_APPS_DIR)/Reveal.app/Contents/SharedSupport/iOS-Libraries8. 在Xcode中,构建并运行您的应用。如果应用运行于真实设备之上,请确保此设备与正在运行Reveal的Mac机器,处于同一WiFi网络中。如果一切正常运行,请切换到Reveal应用,此时您的应用应会出现在应用选择器的下拉列表当中。选中您的应用,确认可以看到此时正在模拟器(或设备)中运行的应用界面截图。2.2 动态加载动态加载允许iOS应用在运行时,可以按需地加载第三方库。采用这种方式,库文件无需连接入应用的可执行文件,而是被加入到了应用Bundle中去,从而在运行时能按需加载。这种方式使得开发者可以在个人应用中,完全自由地控制Reveal库的加载,以及其服务的启动与停止。将Reveal加入您的Xcode工程,使得您团队中的其他成员无需任何额外的配置,就可以使用Reveal。提示: 永远不要将包含Reveal动态库文件的应用提交给Apple的App Store。Apple不允许将含有动态加载库文件的iOS应用发布到App Store中。1. 在Xcode中打开您的iOS工程。2. 启动Reveal并选择HelpShow Reveal Library in Finder,这将会打开Finder窗口,并显示一个名为iOS-Libraries的文件夹。3. 将libReveal.dylib文件拖入Xcode中的Project Navigator面板。4. 在下图所显示的Add to targets对话框中,不选中任何一个target。这确保了Xcode不会在编译时连接动态库文件。可选步骤:选中Copy items if needed,将会把libReveal.dylib拷贝到工程中。如果你这样做了,那么当更新Reveal至新版本时,也依照上述步骤更新该文件。5. 点击Finish。6. 在Copy Bundle Resources配置区域中,加入libReveal.dylib。7. 在Link Binary With Libraries配置项中: - 如果已有libReveal.dylib,请将其移除,在编译时不应该链接dylib文件。 - 如果下列系统框架与库文件还不存在,请将他们加入: - libz.tdb - CFNetwork.framework - QuartzCore.framework - CoreGraphics.framework说明:如果Xcode使用自动链接帮助你自动添加了这些框架,那么就不需要手动添加了。8. 为了能在debugger之外,将库文件动态地载入设备上的应用,您需要在构建过程中加入对libReveal.dylib文件的code sign。进入target的Build Phases标签页,选择EditorAdd Build PhaseAdd 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 9. 将下面的代码加入到项目中合适的类文件中(例如将其放到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: #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; 警告: 不要在发布构建中调用此方法,确保仅是在应用的调试过程中加载libReveal.dylib。10. 可以在UIApplicationDelegate的applicationDidBecomeActive:方法中调用上面的loadReveal方法,以确保Reveal库尽早地被加载进来。Swift:func applicationDidBecomeActive:(application: UIApplication) self.loadReveal()Objective-C: (void)applicationDidBecomeActive:(UIApplication *)application self loadReveal; 提示: 上面这样做的好处是会让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; 11. 在Xcode中构建并运行您的应用。如果一切正常运行,请切换到Reveal应用,此时您的应用应会出现在应用选择器的下拉列表当中。选中您的应用,确认可以看到此时正在模拟器(或设备)中运行的应用界面截图。图132.3 CocoaPodsCocoaPods是一款针对iOS与OS X项目的依赖管理系统,它大大简化了以往Xcode工程里对第三方库的依赖管理与配置工作。CocoaPods提供了Podspec用于将Reveal集成入您的项目。提示: 不要将连接了Reveal库文件的应用用于正式发布。下面的指南描述了一种使用构建配置来使Reveal静态库文件仅在调试构建中连接的方式。说明:此说明要求您在之前已经在项目中配置好了CocoaPods,如果对Cocoapods不了解,可以参考iOS开发笔记- 使用CocoaPods管理第三方库(/p/a9a8d241898b)。1. 将下面内容加入你的Podfile中: pod Reveal-iOS-SDK, :configurations = Debug2. 在项目的根目录下执行pod install命令(如果之前已经在项目中使用了CocoaPods,请执行pod update命令)。3. 从项目中移除Reveal根据您实际所选择的Reveal集成方式,请根据下述相关步骤来移除Reveal。一旦库文件成功的移除后,下面的内容将不再会在您的应用启动时出现在Xcode控制台。INFO: Reveal Server started (Protocol Version X).3.1 静态连接1. 打开您的Xcode工程。2. 从Project Navigator中删除Reveal.framework的引用。3. 在Xcode的Project Navigator中选中您的工程,对于每一个集成了Reveal得target,请选择Build Settings标签页,将下面内容从Debug 配置中的Other Linker Flags设置中移除: -framework Reveal -ObjC and -lz (删除前请确认此配置内容仅是用于Reveal)。4. 运行应用,确认Reveal没有和应用连接上。3.2 动态连接1. 打开您的Xcode工程。2. 从Project Navigator中删除libReveal.dylib的引用。3. 在Xcode的Project Navigator中选中您的工程,对于每一个集成了Reveal得target,选择Build Phases 标签页,如果下列库文件仅供Reveal使用的话,请将它们从Link Binary With Libraries 配置中移除: - libz.dylib - CFNetwork.framework - QuartzCore.framework - CoreGraphics.framework4. 将自定义的codesign内容从Build Phases下的Run Script中删除。5. 将loadReveal / startReveal方法从您的代码中删除。6. 运行应用,确认Reveal没有和应用连接上。3.3 CocoaPods1. 在您的Podfile文件中删除下面这行内容: pod Reveal-iOS-SDK, :configurations = Debug2. 在项目的根目录下执行pod update命令。3. 如果您的Podfile中只有Reveal-iOS-SDK一个pod依赖,请根据此说明,将CocoaPods从项目中完全移除。4. 运行应用,确认Reveal没有和应用连接上。4. 显示效果上图是Reveal的运行界面,其界面主要分成3部分:- 左边部分是整个界面的层级关系,在这里可以以树形级层的方式来查看整个界面元素。- 中间部分是一个可视化的查看区域,用户可以在这里切换2D或3D的查看方式,这里看到的也是程序运行的实时界面。- 右边部边是控件的详细参数查看区域,当我们选中某一个具体的控件时,右边就可以显示出该控件的具体的参数列表。我们除了可以查看这些参数值是否正确外,还可以尝试修改这些值。所有的修改都可以实时反应到中间的实时预览区域。5. 重要提示1. 不要将连接了Reveal库文件的应用正式发布。R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年酒店管理专业技能面试题与应对策略
- 2025年建筑装饰设计师职业资格认证考试预测题详解
- 2025年化工工艺面试热点烷基化工艺答题技巧与答案解析
- 他字的笔顺教学课件
- 2025年农业工程技术与装备考试要点梳理
- 2025年焊接技能认证考试模拟题及答案全解含钎焊
- 2025年特岗教师招聘美术学科面试专业知识点梳理与预测题解析
- 2025年物联网初级工程师高频考题解析
- 2025年酒店经理高级面试实战指南与模拟题解析
- 2025年初级产品经理实战模拟面试题库及解析
- 2025-2030在线语言教育行业发展分析及前景趋势与投资研究报告
- T-CACM 1064-2018 针刀医学临床 通.用要求
- 天津市南开区2025年数学五年级第二学期期末综合测试试题含答案
- 骨干教师培训讲座内容
- 电气行业与市场分析
- 2025年乡村全科助理医师考试题库及答案
- toc培训课件教学课件
- 菌毒种或样本等感染性材料管理制度
- 排水设施养护管理制度
- 基于人工智能的智能投顾系统研究
- 汽车抵押借款合同协议范文样本
评论
0/150
提交评论