
获得徽章 0
- #iOS知识小集# 「 解决CocoaPods v1.7.0生成了多Xcodeproj 后的post_install问题」 @jkpang-庞
今天更新CocoaPods v1.7.0并生成多个Xcodeproj后,在设置这些子Projects、Targets相关配置参数时(post_install操作)遇到的问题,后来通过查看CocoaPods源码installer.rb文件找到了解决方案,只需在Podfile内容最后写上下列代码即可:
post_install do |installer|
installer.pod_target_subprojects.each do |project|
project.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
end
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
end
end
end
end展开赞过评论2 - #iOS知识小集#「 获取其他App的bundle id的几种方法 」
1.使用PP助手或者老版本的itunes下载相应的app的ipa包,改后缀名解压后,获取info.plist,然后打开查看bundle id
2.在Github上下载iOSAppsInfo这个项目,在真机运行这个项目,可以获取真机上所有App的一些相关信息,bundle id,appVersion等,如图一所示,因为项目中的实现依赖于PrivateApi_LSApplicationWorkspace这个类,在iOS 11以后,这个类失效了,所有只能在iOS 10及以下的真机运行,项目地址t.cn
3.在Mac上打开控制台应用,连接真机,然后在真机上启动App,便会打印出相关的日志,在输入框中输入"with intent foreground-interactive"对日志进行过滤,可以看到App在冷启动时,SpringBoard进程打印的"Bootstrapping com.tencent.xin with intent foreground-interactive"日志,com.tencent.xin便是微信的bundle id,必须是冷启动才会打印,如图二所示
4.在App Store中搜索相关应用,将其分享到微信,然后使用浏览器打开链接,可以看到网址是这种格式"t.cn",其中id414478124是微信的app id,根据这个接口
t.cn>可以获取到App相关的一些信息,有一些ASO网站使用这种原理,获取了大量App的信息,做成一个服务平台了,在里面也可以搜索App名字,然后获得bundle id等信息,例如七麦数据,如图三所示,链接
t.cn
展开评论点赞 - #iOS知识小集#「 如何比较日期是否为同一天 」by @halohily
在产品需求中,某个功能每天例行一次非常常见。比如,某个开关用户当天关掉之后,当天不再展示,直到新的一天第一次启动。再比如,某个功能一天有使用次数上限,直到新的一天第一次启动才恢复额度。一般我们处理这种需求都是在本地存储一个变量来记录最后一次启动的日期,在每次判断功能是否可用时,比较存储的日期和当前最新日期是否同一天。之前处理这个需求的时候,是使用 NSCalendar 对象分别生成两个 NSDate 对象的 NSDateComponents,进而分别比较年、月、日。后来发现,有一个简便的做法是使用同一个 NSDateFormatter 分别生成两个 NSDate 的 NSString,直接比较字符串是否相同即可。
与此相似的还有如何判断一个字符串是否为合法的 NSURL?最正确的办法是使用这个字符串去生成 NSURL 对象,如果返回 nil,这个字符串即为不合法。大多数人面对这个需求很可能会选择繁琐的正则匹配等方式,殊不知转换一下思路,事情会变得非常优雅且简便。展开赞过22 - @hite和落雁 童鞋在我们这发了不少文章,为表示感谢,送上一本《重构 2》,选书的时候发现有活动,所以又加了一本《数学之美》,两本比一本还便宜一些
。感谢小集的所有作者……后续我们都会给满5篇的作者送上一本书,以表示感谢。也欢迎大家有好文章发给我们,知识小集 公众号 zsxjtip,希望能和大家分享更多好文章
赞过评论2 - #iOS知识小集#「 解决某些情况UIImage的data为空的问题 」
通常,我们会用UIImage的jpegData()和pngData()方法来获取UIImage的data,操作很简单,但是在某些特定情况下,UIImage对象不为nil,但是取出来的data是nil。
例如在在生成二维码的过程中(如图),image是可以正常显示在屏幕上的,但是获取data的时候,确是nil,用Xcode预览工具查看也是无法查看的。解决方案是在内存中绘制一下,再使用即可,这样可以隐氏的补全bitmap,当然你也可以写一堆CoreGraphics代码自己直接补全bitmap。
在我们拿到一个非nil的UIImage对象的时候,可以先用jpegData()或pngData()转一下,取出来data如果是nil,再补全一下bitmap,看是否有data。
如果有更好的方案,欢迎一起分享讨论。展开赞过评论1 - #iOS知识小集#「 关于 UITableViewCell 的 indentationLevel 」
UITableViewCell 的 textLabel 是有一个默认左边距为10px的。实际上,这是由indentationLevel 和 indentationWidth 控制的缘故。indentationLevel 默认为0,indentationWidth 默认为10。
现在重新对这两个属性赋值。
cell.indentationLevel = 2;
cell.indentationWidth = 50;
运行之后,如图一。cell 的缩进量明显变大了。
缩进量 = indentationLevel * indentationWidth。值得注意的是,当indentationLevel = 0时,无论indentationWidth设为多少,最后缩进量都为10。
但是对于自定义cell来说,indentationLevel 并不能起到缩进效果。如图二。要解决这个问题的话,可能只能通过改变约束来达到目的。如果有更好的解决方案,欢迎交流。展开赞过评论1