##Introduction
The TestFlight SDK allows you to track how beta testers are testing your application. Out of the box we track simple usage information, such as which tester is using your application, their device model/OS, how long they used the application, logs of their test session, and automatic recording of any crashes they encounter.
To get the most out of the SDK we have provided the Checkpoint API.
The Checkpoint API is used to help you track exactly how your testers are using your application. Curious about which users passed level 5 in your game, or posted their high score to Twitter, or found that obscure feature? With a single line of code you can finally gather all this information. Wondering how many times your app has crashed? Wondering who your power testers are? We've got you covered. See more information on the Checkpoint API in section 4.
Alongside the Checkpoint API is the Questions interface. The Questions interface is managed on a per build basis on the TestFlight website. Find out more about the Questions Interface in section 6.
For more detailed debugging we have a remote logging solution. Find out more about our logging system with TFLog in the Remote Logging section.
##Considerations
Information gathered by the SDK is sent to the website in real time. When an application is put into the background (iOS 4.x) or terminated (iOS 3.x) we try to send the finalizing information for the session during the time allowed for finalizing the application. Should all of the data not get sent the remaining data will be sent the next time the application is launched. As such, to get the most out of the SDK we recommend your application support iOS 4.0 and higher.
This SDK can be run from both the iPhone Simulator and Device and has been tested using Xcode 4.0.
##Integration
1. Add the files to your project: File -> Add Files to " "
1. Find and select the folder that contains the SDK
2. Make sure that "Copy items into destination folder (if needed)" is checked
3. Set Folders to "Create groups for any added folders"
4. Select all targets that you want to add the SDK to
2. Verify that libTestFlight.a has been added to the Link Binary With Libraries Build Phase for the targets you want to use the SDK with
1. Select your Project in the Project Navigator
2. Select the target you want to enable the SDK for
3. Select the Build Phases tab
4. Open the Link Binary With Libraries Phase
5. If libTestFlight.a is not listed, drag and drop the library from your Project Navigator to the Link Binary With Libraries area
6. Repeat Steps 2 - 5 until all targets you want to use the SDK with have the SDK linked
3. Add libz to your Link Binary With Libraries Build Phase
1. Select your Project in the Project Navigator
2. Select the target you want to enable the SDK for
3. Select the Build Phases tab
4. Open the Link Binary With Libraries Phase
5. Click the + to add a new library
6. Find libz.dylib in the list and add it
7. Repeat Steps 2 - 6 until all targets you want to use the SDK with have libz.dylib
4. In your Application Delegate:
1. Import TestFlight: `#import "TestFlight.h"`
***NOTE:*** Rather than importing `TestFlight.h` in every file you may add the above line into you pre-compiled header (`<projectname>_Prefix.pch`) file inside of the
#ifdef __OBJC__
section. This will give you access to the SDK across all files.
2. Get your Team Token which you can find at [http://testflightapp.com/dashboard/team/](http://testflightapp.com/dashboard/team/) select the team you are using from the team selection drop down list on the top of the page and then select Team Info.
3. Launch TestFlight with your Team Token
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// start of your application:didFinishLaunchingWithOptions
// ...
[TestFlight takeOff:@"Insert your Team Token here"];
// The rest of your application:didFinishLaunchingWithOptions method
// ...
}
4. To report crashes to you we install our own uncaught exception handler. If you are not currently using an exception handler of your own then all you need to do is go to the next step. If you currently use an Exception Handler, or you use another framework that does please go to the section on advanced exception handling.
5. To enable the best crash reporting possible we recommend setting the following project build settings in Xcode to NO for all targets that you want to have live crash reporting for. You can find build settings by opening the Project Navigator (default command+1 or command+shift+j) then clicking on the project you are configuring (usually the first selection in the list). From there you can choose to either change the global project settings or settings on an individual project basis. All settings below are in the Deployment Section.
1. Deployment Post Processing
2. Strip Debug Symbols During Copy
3. Strip Linked Product
##Beta Testing and Release Differentiation
In order to provide more information about your testers while beta testing you will need to provide the device's unique identifier. This identifier is not something that the SDK will collect from the device and we do not recommend using this in production. To send the device identifier to us put the following code before your call to takeOff.
#define TESTING 1
#ifdef TESTING
[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];
#endif
This will allow you to have the best possible information during testing, but disable getting and sending of the device unique identifier when you release your application. When it is time to release simply comment out #define TESTING 1. If you decide to not include the device's unique identifier during your testing phase TestFlight will still collect all of the information that you send but it may be anonymized.
##Checkpoint API
When a tester does something you care about in your app you can pass a checkpoint. For example completing a level, adding a todo item, etc. The checkpoint progress is used to provide insight into how your testers are testing your apps. The passed checkpoints are also attached to crashes, which can help when creating steps to replicate.
`[TestFlight passCheckpoint:@"CHECKPOINT_NAME"];` Use `passCheckpoint:` to track when a user performs certain tasks in your application. This can be useful for making sure testers are hitting all parts of your application, as well as tracking which testers are being thorough.
##Feedback API
To launch unguided feedback call the openFeedbackView method. We recommend that you call this from a GUI element.
-(IBAction)launchFeedback {
[TestFlight openFeedbackView];
}
If you want to create your own feedback form you can use the submitCustomFeedback method to submit the feedback that the user has entered.
-(IBAction)submitFeedbackPressed:(id)sender {
NSString *feedback = [self getUserFeedback];
[TestFlight submitFeedback:feedback];
}
The above sample assumes that [self getUserFeedback] is implemented such that it obtains the users feedback from the GUI element you have created and that submitFeedbackPressed is the action for your submit button.
Once users have submitted feedback from inside of the application you can view it in the feedback area of your build page.
##Upload your build
After you have integrated the SDK into your application you need to upload your build to TestFlight. You can upload from your dashboard or or using the Upload API, full documentation at [https://testflightapp.com/api/doc/](https://testflightapp.com/api/doc/)
##Questions I
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本人自己写的和收集整理比较完全的24个各类源码 适合新手或需要参考的朋友 有24代码 需要的朋友下载吧 下拉单选框 淘宝类项目 手势识别 画笔画板 放大镜 网络请求缓存 复选框 折纸效果 相册显示动画demo 进度条样式 股票画板显示 游戏源码一个 底框组件(UIMenuBar) 多语言选择等等 需要的朋友自行下载!
资源推荐
资源详情
资源评论
收起资源包目录
iOS源码大全(24个) (2155个子文件)
libTestFlight.a 3.76MB
libCuzyAdSDK_universal.a 2.36MB
all-wcprops 17KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 1KB
all-wcprops 610B
AUTHORS 489B
proc_nut.c 44KB
InfoNES.c 35KB
InfoNES_pAPU.c 30KB
K6502.c 26KB
InfoNES_iPhone.c 25KB
InfoNES_Mapper.c 11KB
voyager_lcd.c 8KB
digit_ops.c 4KB
macutil.c 2KB
contents 22KB
InfoNES_Mapper_005.cpp 15KB
InfoNES_Mapper_090.cpp 13KB
InfoNES_Mapper_160.cpp 10KB
InfoNES_Mapper_045.cpp 10KB
InfoNES_Mapper_004.cpp 9KB
InfoNES_Mapper_001.cpp 9KB
InfoNES_Mapper_074.cpp 9KB
InfoNES_Mapper_114.cpp 9KB
InfoNES_Mapper_083.cpp 9KB
InfoNES_Mapper_047.cpp 9KB
InfoNES_Mapper_049.cpp 9KB
InfoNES_Mapper_044.cpp 9KB
InfoNES_Mapper_115.cpp 8KB
InfoNES_Mapper_249.cpp 8KB
InfoNES_Mapper_019.cpp 8KB
InfoNES_Mapper_018.cpp 8KB
InfoNES_Mapper_119.cpp 8KB
InfoNES_Mapper_118.cpp 8KB
InfoNES_Mapper_023.cpp 8KB
InfoNES_Mapper_112.cpp 8KB
InfoNES_Mapper_187.cpp 7KB
InfoNES_Mapper_116.cpp 7KB
InfoNES_Mapper_021.cpp 7KB
InfoNES_Mapper_245.cpp 7KB
InfoNES_Mapper_100.cpp 7KB
InfoNES_Mapper_248.cpp 7KB
InfoNES_Mapper_183.cpp 7KB
InfoNES_Mapper_252.cpp 6KB
InfoNES_Mapper_095.cpp 6KB
InfoNES_Mapper_010.cpp 6KB
InfoNES_Mapper_009.cpp 6KB
InfoNES_Mapper_064.cpp 6KB
InfoNES_Mapper_110.cpp 5KB
InfoNES_Mapper_025.cpp 5KB
InfoNES_Mapper_251.cpp 5KB
InfoNES_Mapper_105.cpp 5KB
InfoNES_Mapper_026.cpp 5KB
InfoNES_Mapper_033.cpp 5KB
InfoNES_Mapper_189.cpp 5KB
InfoNES_Mapper_068.cpp 5KB
InfoNES_Mapper_017.cpp 5KB
InfoNES_Mapper_085.cpp 5KB
InfoNES_Mapper_255.cpp 4KB
InfoNES_Mapper_048.cpp 4KB
InfoNES_Mapper_182.cpp 4KB
InfoNES_Mapper_191.cpp 4KB
InfoNES_Mapper_016.cpp 4KB
InfoNES_Mapper_243.cpp 4KB
InfoNES_Mapper_067.cpp 4KB
InfoNES_Mapper_000.cpp 4KB
InfoNES_Mapper_113.cpp 4KB
InfoNES_Mapper_135.cpp 4KB
InfoNES_Mapper_082.cpp 4KB
InfoNES_Mapper_069.cpp 4KB
InfoNES_Mapper_024.cpp 4KB
InfoNES_Mapper_065.cpp 4KB
InfoNES_Mapper_051.cpp 4KB
InfoNES_Mapper_057.cpp 4KB
InfoNES_Mapper_117.cpp 4KB
InfoNES_Mapper_022.cpp 4KB
InfoNES_Mapper_006.cpp 4KB
InfoNES_Mapper_075.cpp 4KB
InfoNES_Mapper_109.cpp 4KB
InfoNES_Mapper_046.cpp 4KB
InfoNES_Mapper_099.cpp 4KB
InfoNES_Mapper_235.cpp 4KB
InfoNES_Mapper_225.cpp 4KB
InfoNES_Mapper_092.cpp 4KB
InfoNES_Mapper_202.cpp 4KB
InfoNES_Mapper_088.cpp 3KB
InfoNES_Mapper_043.cpp 3KB
InfoNES_Mapper_134.cpp 3KB
InfoNES_Mapper_234.cpp 3KB
InfoNES_Mapper_080.cpp 3KB
InfoNES_Mapper_236.cpp 3KB
InfoNES_Mapper_228.cpp 3KB
InfoNES_Mapper_229.cpp 3KB
InfoNES_Mapper_041.cpp 3KB
InfoNES_Mapper_034.cpp 3KB
InfoNES_Mapper_096.cpp 3KB
InfoNES_Mapper_076.cpp 3KB
共 2155 条
- 1
- 2
- 3
- 4
- 5
- 6
- 22
资源评论
- zyajax2014-06-22好多都不能运行啊.....
- xiuluofengzi2014-12-28还行,不能运行的可以自己尝试去修改
- shihliangou2013-11-01非常好的参考资源
- haozi1102014-02-21好多都不能运行啊
- degel882015-06-08很好的资源,很有参考价值,谢谢分享
三三三牛
- 粉丝: 36
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功