iOS

A collection of 21 posts

AdMob

提交 App 到 App Store 时遇到 The App References Non-Public Selectors 警告

使用 Xcode 6.3.1 提交 App 到 App Store 时遇到如图所示错误 Google 来一个清除 ~/Library/Developer/Xcode/DerivedData 目录的方法,没有用 利用错误提示里面的关键字 setScreenName 也搜索不到错误出处 排查了半天突然想到也许是 AdMob SDK 由 7.1.0 更新到新版本 7.2.1 所致 于是将 podfile 中的 AdMob 指定到上个版本 pod 'Google-Mobile-Ads-SDK', '7.1.0'

  • ytzong
    ytzong
AdMob

AdMob 导致浅色状态栏失效

App 中引入了 AdMob 全屏广告,一般会在 AppDelegate 中会对其进行预加载,以便提高广告展示速度 但这会导致浅色状态栏 UIStatusBarStyleLightContent 不起作用,一直显示为黑色 通过设置 TARGETS -> General -> Deployment Info -> Status Bar Style = Light 无法解决 经过反复尝试,解决方法如下: 1、第一个 UIViewController 中加入 - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 2、Info.plist 中添加值为 No

  • ytzong
    ytzong
iOS

几个常用的 Xcode 插件

== 注:此文章介绍的插件暂不支持 Xcode 8,请勿安装 == Alcatraz 首先介绍的 Alcatraz 是一个 Xcode 插件管理工具,下面介绍的插件都可以通过它来统一管理安装、卸载等,所以下面就不做链接了,字母顺序排序 BBUDebuggerTuckAway 编写代码时自动收缩底部的调试栏 CocoaPods 大名鼎鼎的依赖管理工具 CocoaPods 的插件,不想输入命令行的话鼠标点几下就行了 HOStringSense 字符串里面转义字符什么的最讨厌了,这个插件完美的解决了这个问题 KSImageNamed 为智能提示补充上图片名提示的功能 OMColorSense 输入颜色代码的时候可以预览颜色,同时也可以调用出颜色选择面板进行颜色选择 RTImageAssets 通过 @3x 图片自动生成 @2x 和 @1x 图片 HTYCopyIssue 在错误提示上右键直接打开 Google、StackOverflow 搜索 XQuit

  • ytzong
    ytzong
iOS

IAP & RMStore 的几个小问题

之前一直是使用 MKStoreKit 在做 IAP(In-App Purchases,应用内支付),API 简单好用,不过作者许久不更新,最近改为 RMStore Unknown pruduct identifier IAP 支付时需要提前请求商品信息,商品信息获取到之后才能购买,官方 demo 中有相关代码: _products = @[@"net.robotmedia.test.consumable", @"net.robotmedia.test.nonconsumable", @"net.robotmedia.test.nonconsumable.2"]; [UIApplication sharedApplication].networkActivityIndicatorVisible

  • ytzong
    ytzong
iOS

iOS 开发入门(2013年冬版)

第一款 App 上架距今已有两年有余,之前写的 iOS 开发初探 也随着 iOS 版本的升级有些陈旧,加上最近又有朋友咨询 iOS 开发的事情,于是尘封的博客再次开启,虽然现在很多人转到了微信公众平台,但我依旧觉得博客更有魅力(AD: 大家需要博客空间的,可以到 庙 这里看看),微信里面是 light app,而博客是更加开放的 web(什么?你竟然在这里鬼扯更封闭的 iOS?) 搞清楚你的目标 是纯粹为了兴趣,还是为了换一份更好的工作而努力成为技术达人,抑或通过出售 app 赚钱?每个人的目标不同,学习方法自然有些许差异 ——- 有一部分同学在这里退学了 ——- 残酷的真相! 也许你经常看到某个小 app 赚了几百万,几个学生做的

  • ytzong
    ytzong
iOS

App Store 销售统计工具简介

iTunes Connect 后台的统计比较难看懂,所以催生了一些第三方的统计工具。我只用本地统计工具,如下: App Sales 开源的 iOS app,项目地址 https://github.com/omz/AppSales-Mobile,编译到 iPhone 或 iPad 上即可运行。 AppViz 收费的 Mac app,下载地址 http://www.ideaswarm.com/,可免费试用一个月。 有个无限试用的方法:到期后用 AppCleaner 之类的卸载工具把 app 相关的文件彻底删除,再重新安装即可开始新一轮的试用。 每日报表释出时间 近大半年是在北京时间下午7点半左右(之前在6点半左右),不固定,我经历的一次最迟是到北京时间第二天早上,

  • ytzong
    ytzong
iOS

iOS 开发批量保存图片到相册时丢图片的解决方法

同一个问题(前一次是一年多前,写完就忘了)栽了两次,纪录一下。 症状 在循环语句中批量保存图片到相册时在低配置的设备中会有丢失的情况,代码一般是这个样子 for (int i = 0; i < n; i++) { UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); } debug了一下,错误是 write busy 原因 iOS 往系统相册写照片的时候是单线程,一张存完才会存下一张,可能是因为要经过这几个过程:压缩图片、生成缩略图、SQLite保存数据,低配置的机器(比如 iPhone4)有点慢,同时写入照片会有失败的情况,我大 iPhone5 无压力 解决方法 知道原因后就好解决了,方法就是一张存成功再存下一张

  • ytzong
    ytzong
iOS

Stroyboard 项目中出现 Applications are expected to have a root view controller at the end of application launch 的解决方法

此警告出现的场景有可能是: 更改了 Stroyboard 的名称 项目中删除了 Storyboard,之后从其他项目拖进来一个 Storyboard,这两个 Storyboard 的文件名不一样,比如删掉的是 MainStoryboard.storyboard,新加进来的是 MainStoryboard_iPhone.storyboard 原因是由于项目的 -Info.plist文件未自动更新引起的,解决方法就是到 Supporting Files 目录中找到 项目名-Info.plist,找到开头为 Main storyboard file base name 的 Key,将其 Value 改为新 storyboard 的文件名。

  • ytzong
    ytzong
iOS

如何安装 CocoaPods

在 iOS 项目开发中,经常会用到第三方的源代码,CocoaPods 就是为了方便管理这些源码的工具。 == 在 Mac 升级到 El Capitan 之后,CocoaPods 官方的安装说明没有及时更新,可以按照下面方法安装(此方法可以同时解决 Xcode 7 里 CocoaPods 插件失效的问题,记得重启 Xcode) == 删除旧版本 sudo gem uninstall cocoapods sudo gem install -n /usr/local/bin cocoapods;sudo chmod +rx /usr/local/bin/ via https:

  • ytzong
    ytzong
iOS

一次App Store加急更新的经历

由于内购出了问题,申请了加急审核(申请地址: https://developer.apple.com/contact/app-store/?topic=expedite ) 两天后收到回复,说不符合加急审核的条件,凸 于是立马又填了个加急的单 一天后进入 In Review 状态(另一个 APP 沾光也进入 In Review 状态) 又等了两天上架(另一个 APP 依然 In Review) 折腾下来比普通流程(7天)提前2天上架 值得庆幸的是上架后第一天成绩还不错,R.I.P. Steve Jobs.

  • ytzong
    ytzong
iOS

MKStoreKit 小记

之前某个应用尝试了 In-App Purchases 的 Non-Consumable 这种购买方式,为了图省事,使用了 MKStoreKit 来实现,走完整个流程跌跌撞撞,查了不少资料,稀里糊涂的成功上架。 最近,资本家贪婪的本性发作,需要添加更多 Non-Consumable 的购买选项,由于无法测试(需要和 binary 一起提交审核),随便弄一下就提交了,没想到平时十分负责的苹果审核人员居然没测出问题,上架后收到不少用户的邮件才发现出了大事,又折腾半天才搞定,记录一下。 1, 在应用中添加 MKStoreKit,略 2, 编辑 MKStoreKitConfigs.h,把所有涉及的 IAP 的 ID 都 define 进来,方便代码调用,例如

  • ytzong
    ytzong
iOS

四谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles

在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Retinizer中把文字变清晰) HTTP抓包 打开Charles程序 查看Mac电脑的IP地址,如192.168.1.7 打开iOS设置,进入当前wifi连接,设置HTTP代理Group,将服务器填为上一步中获得的IP,即192.168.1.7,端口填8888 iOS设备打开你要抓包的app进行网络操作 Charles弹出确认框,点击Allow按钮即可 HTTPS抓包 在 iOS 设备上打开这个网址 http://www.charlesproxy.com/getssl 安装 Charles SSL 证书 在Charles的工具栏上点击设置按钮,选择Proxy Settings…

  • ytzong
    ytzong
iOS

重建iOS开发配置证书

MAC重装系统,开发证书没有备份,加上iDP即将过期,在重新导入证书的过程中遇到了一些小麻烦,比如 Xcode 4.4.1 中的证书出现 Valid Signing Identity not found,现记录一下(仅适用于重新生成证书者,不适用首次配置证书联机调试及发布,有此需要请自行搜索) 生成私有证书,打开钥匙串,钥匙串访问 – 证书助理 – 从证书颁发机构请求证书…,填入iDP邮箱及常用名称(在 iOS Dev Center 页面的 Hi, XXX 处查找,其中XXX为常用名称),选存储到磁盘,得到 CertificateSigningRequest.certSigningRequest 文件 打开 iOS Provisioning Portal 中的

  • ytzong
    ytzong
iOS

App Store 被拒经历

链接堆砌,苹果建议用HTML5来做 UIWebView 嵌页面片,苹果建议让用户通过浏览器访问,比如爱知乎,开始几个版本通过了,后面的更新一直没提交上去 屏幕坏点检测应用,苹果说会误导用户,未上架 登陆账号有两个字母写反了,改正后通过 因远程服务器反应慢,苹果的人估计没耐心等,就说有bug给拒了,重新提交一份通过 应用标题加了几个描述语句,苹果让在描述中写明达到此目的的操作流程,改正后通过 一个第三方的应用,描述文字中有该网站的链接,进去网站后能找到付费链接,苹果说该网站有自己的支付方式,去除网址后通过

  • ytzong
    ytzong
iOS

再谈iOS抓包,使用Fiddler

之前介绍过iOS抓包的方法,缺点有: 要插网线 要有MBP Wireshark用起来不太习惯 今天碰巧看到Secret iOS business; what you don’t know about your apps里面熟悉的Fiddler截图,恍然大悟,上面的问题就都解决了 下面以VirtualBox为例 VirtualBox 工具栏 – 设备 – 更改网络连接 – 在网络选项卡中将连接方式改为 Bridged Adapter(默认为NAT) Fiddler 工具栏 Tools – Fiddler Options – Connections 中勾选 Allow Remote Computers to Connect 查看虚拟机的IP地址,如192.168.1.7

  • ytzong
    ytzong
iOS

iOS 抓包

一个方法是越狱后通过Cydia安装network-cmds、sudo、tcpdump、mobileterminal进行抓包,将抓包后的文件拷出来到电脑里用Wireshark等进行分析,不过没实操过 bz的方法是把Macbook Pro作为wifi热点来抓包的,没什么新意,仅作记录: MBP插上网线 进入设置-共享,将Internet 共享开启(通过以下方式将:以太网 连接共享给其他电脑:AirPort) iOS通过MBP共享的wifi接入点联网 运行MBP上的Wireshark开始捕捉 运行iOS上要抓包的app

  • ytzong
    ytzong