通常 App 都会在它的设置页面或者关于页面添加一个“去评分”选项,或者在用户使用 App 过程中适当时机弹窗,引导用户跳转到 App Store 对当前 App 进行评分或者撰写评论。
检测设备是否为 iPhone X/XS/XR 的几种方式
在上一条小集《iPhone 屏幕分辨率终极指南》中,我们整理介绍了目前已发布的所有 iPhone 设备的屏幕数据,包括了最新上市的 iPhone XS、iPhone XS Max 和 iPhone XR。
最后我们介绍了一种在代码中通过获取屏幕的高度判断是否等于 812.0
或 896.0
来检测设备是否为 iPhone X 的方法,但该方法存在小瑕疵,需要考虑一下两点:
- 当 App 支持横竖屏切换时,在横屏模式下也能够正确判断;
- 在模拟器中调试时,能够正确判断当前所选则的模拟器类型是不是 iPhone X;
因此,本条小集重新整理一下我们目前所了解到的几种检测设备是否为 iPhone X 的方式,供大家参考,不足之处欢迎补充。
iPhone 屏幕分辨率终极指南
上周,苹果发布了三款新的 iPhone 设备,它们的屏幕数据分别如下:
- iPhone XS: 5.8 英寸,375pt * 812pt (@3x);
- iPhone XR: 6.1 英寸,414pt * 896pt (@2x);
- iPhone XS Max: 6.5 英寸,414pt * 896pt (@3x);
iOS 金额字符串格式化显示的方法
在一些金融类的 App 中,对于表示金额类的字符串,通常需要进行格式化后再显示出来。例如:
0
–>0.00
123
–>123.00
123.456
–>123.46
102000
–>102,000.00
10204500
–>10,204,500.00
iOS App 的反调试(Anti-Debug)
当我们上线一个 App,当然是不希望自己的 App 被攻击者/黑客玩弄于股掌之间。虽然说没有绝对的安全,但是我们可以做一些防护措施,增加攻击的成本和难度。
在越狱后的 iPhone 上运行 App,然后通过 GDB 进行动态调试,是大多数攻击者的首选,我们今天就来聊一聊如何防止 App 被别人调试。
使用 Keychain 存储登录态需要注意的一个坑
我们通常会在 Keychain(钥匙串)中存储一些密码、用户登录态等敏感数据,一是可以提高保存数据的安全性;二是当用户卸载 App 后重新安装,可以自动登录保留上次的登录态;三是同一开发者账号下的不同 App,如果是采用同一套账户体系,就可以通过 Keychain Groups 共享登录态。
UIViewController 设置导航栏和标签栏不同 title 的问题
我们通常会在一个 UIViewController
的 viewDidLoad
方法中通过 self.title = xxx
的方式给一个页面设置其导航栏标题,相信大家对这再熟悉不过了。
如果一个 VC 页面中同时具有 NavigationBar
(导航栏)和 TabBar
(标签栏),而且我们又想让这两个地方的标题显示不一致,如下图所示,在首页顶部导航栏标题中显示“知识小集”,而在底部标签栏标题中显示“首页”:
配置 xcodebuild 命令打包支持 Bitcode
我们通常会把一些公用的模块抽离出来打成一个 .a 静态库或者 .framework 动态库,然后再嵌入到宿主工程中。
最近我们的 App 工程开启 Bitcode 编译选项后(Enable Bitcode = YES),发现在进行 Archive 归档打 Release 包时,报如下错误,提示说工程使用的 libTestStaticSDK.a 静态库不支持 Bitcode:
1 | ld: bitcode bundle could not be generated because '/.../TestApp/TestStaticSDKLib/libTestStaticSDK.a(TestStaticSDK.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture armv7 |
但是我们的 libTestStaticSDK 静态库工程的 Build Settings 中同样是有配置开启 Bitcode 的,为什么打出来的 .a 包却不支持 Bitcode 呢?