为iPad编写应用程序1

CrowdCam LLC技术总监Joakim Fernstad撰写

tl; dr完全可行,仍然!

在CrowdCam,我们喜欢向人们展示他们的照片,在夏天,我们认为为iPad创建新产品会很酷。 如果它也可以在iPad 1上运行,那将非常酷!

该产品称为SendFrame,它显示通过电子邮件发送到连接到iPad应用程序的SendFrame电子邮件地址的照片。 你可以在这里找到它。 从理论上讲,这一切都非常简单,而且iPad 1无法应付(实际上,正如它所显示的那样!)。 但是,iPad 1只能运行iOS 5,最新版本是iOS 5.1.1,这是4年的OS版本(更不用说设备本身是6.5年了!!),并且Apple已将iPad 1标记为旧设备,这意味着他们将不以任何方式,形状或形式支持它。

有几篇文章(例如this和this)可以帮助您确定如何为此旧OS版本开发应用程序,但它们并未提供完整的解决方案。 我发现它比他们描述的要容易,尽管您需要了解一些注意事项。

首先,这是我使用的工具:

  • 运行El Capitan 10.11.6(15G31)的MacBook Pro
  • iPad 1,iOS 5.1.1(9B206)带30针连接器
  • Xcode 7.3(7D175)
  • Xcode 6.2(6C131e)<<魔术的一部分

所有开发人员都可以在Apples开发人员网站(2.5GB)上下载Xcode的早期版本,也可以在此处搜索“ Xcode 6.2”。

为什么我们需要Xcode 6.2? 因为它仍然支持调试iPad 1,所以您只需要跳过其中的一些步骤即可使其正常运行。

有关该应用的一些信息

正如我所说,我们的应用程序非常简单。 用户可以创建一个帐户,选择一个SendFrame电子邮件地址,然后查看传入的照片。 还有一些控件可以在幻灯片中来回移动,旋转照片和删除照片。

共有5个视图,它们使用常规的UINavigationController在它们之间进行导航。 这是情节提要的完美用例。

对于服务器请求,我使用由NSOperation控制的常规NSUrlConnection。 自iOS 4以来,此代码运行良好,没什么花哨的。

故事板

由于此版本可在旧版iOS版本上运行,因此我们不能使用闪亮的新故事板功能。

您可以将此故事板设置为与Xcode 6.2(“打开位置”)兼容,但该设置对我而言一直崩溃,因此我将其保留为Xcode7.x。 这使我们进入箍1:

  • 使用Xcode 7.3在模拟器上进行代码,情节提要和调试。
  • 使用Xcode 6.2在设备(iPad 1)上进行调试。

幸运的是,您可以同时运行两个版本的Xcode(使用功能强大的计算机)。

项目设定

同样,由于该应用程序将在较旧的OS版本上运行,因此我们需要为项目提供一些特定设置。

最明显的当然是部署目标。 在下拉菜单中输入5.1.1。 对于iPad,我们需要它要求全屏显示。 这是因为我们不能在情节提要的早期版本中使用“自动”布局,因此该应用程序不能与另一个应用程序并排运行(实际上,我只是在较新的设备上进行了尝试,并且它可以正常工作,只是无法缩放视图)。

我没有使用资产目录。 我不记得这是否是一个问题,但我知道iOS 5并不存在这些问题,因此我不冒险。

我们不能使用的另一件事是Bitcode,因为低于6.0的iOS版本不支持它。

因此,我们将其关闭。 您可以在项目设置>构建设置>构建选项中找到它。

基本SDK应为“最新”。 假设代码中没有不兼容性(例如,仅使用iOS 9 API),那么您应该能够编译项目而不会出现警告或错误。

当然,您仍然可以将API用于5.1.1以后的OS版本,但是必须包装它们,以便iPad 1不会尝试执行它们。 可以使用下面相当简单的示例代码来完成。

进行调试。

在设备上调试

所以这部分很有趣。 尝试从Xcode 7.3在设备上运行应用程序会在设备管理器中显示此消息。

Xcode 6.2并不需要在iPad 1上运行代码,因此它为您提供各种借口。 首次尝试在设备上运行时,您可能会收到此消息。

在早期版本的Xcode中,设备管理器中有一个复选框,将设备标记为开发。 它不存在了。 现在,您必须将设备添加到与您的开发人员证书匹配的正确的配置文件中。 没关系,您仍然需要这样做。 在使用它的同时, 还要创建一个即席配置文件,您将需要它。 Xcode仍然会抱怨。 从这里开始调试需要3个步骤。

首先,转到设备管理器,右键单击设备,然后选择“在运行目标菜单中显示”。

如果您现在尝试在设备上运行,则可能会显示此错误:

其次,使用Xcode 6.2使用包含iPad UDID的供应配置文件创建一个临时存档。 将其导出并保存在磁盘上(我假设您知道如何执行此操作)。 如果Xcode抱怨64位代码,请阅读此书,但对我而言却并非如此。

第三,这是最偷偷摸摸的过去,将即兴构建从finder拖到设备管理器中所选设备的“ Installed Apps”部分。 这样应该可以在设备上安装该应用程序而不会出现问题。

现在再次检查Xcode的顶部。 现在,“运行目标”是否显示设备名称,而不是通用的“ iOS设备”?

现在已经驯服了Xcode 6.2(出于某些神奇的原因),它将很高兴在iPad 1上运行和调试您的应用! 也就是说,在重新启动Xcode之前,您必须再次从步骤1开始使用它。 那好吧。

提交到应用商店

实际上,这里没有障碍。 与其他任何应用程序一样,使用Xcode 7.2并构建Release存档并通过Xcode上传到Apple。 无需为此使用较早版本的Xcode或Application Loader。 就像提交之前一样,只需在其他设备和更新的iOS版本上测试您的应用即可。

Apple在不到一天的时间内审核并批准了我们的应用程序,该应用程序可从App Store安装,而iPad 1上没有问题。

关于作者

Joakim是CrowdCam LLC的技术创始人,并为iOS,服务器和嵌入式设备编写代码。 您会发现他的随机推文为@signalspy。