Tag: 移动应用开发

如何为您的应用制作出色的,高转化率的App Store屏幕截图

您已经制作了下一个出色的应用程序。 您已经出汗,编码,经过测试,现在可以将最终代码提交给应用商店。 但是现在您将面临营销。 您的潜在用户会看到的最重要的事情之一就是您的应用程序的屏幕截图。 因此,他们不仅需要炫耀您应用程序的最佳元素,而且还需要说服用户您的应用程序是可以下载的。 应用程序应为用户解决一个问题。 游戏解决了无聊。 GPS应用解决了迷路(或迟到)的问题。 食谱应用可让您避免一遍又一遍地吃同样的东西。 因此,您的屏幕截图应反映出您应用的价值。 您的应用程序可以解决什么问题,应用程序的哪些部分向用户展示了它是如何做到的? 因此,逐个屏幕地引导模型用户浏览您的应用程序。 从您的应用程序主屏幕开始,并对其进行截图。 然后,逐步获取以下四个屏幕截图,这些屏幕截图显示了您的用户如何从问题到解决问题! 拥有五个屏幕截图(主屏幕以及另外四个屏幕截图)后,请转到AppToolkit.io并设置一个免费帐户。 设置免费帐户后,为“截图生成器”选择“入门”。 选择您要为其截图的应用程序商店(每个商店中可用的设备类型不同,因此在将应用程序提交给Android时不使用iPhone框架,反之亦然)。 然后,选择所需的布局样式-设备上方或下方的文本。 如果要显示整个设备或仅显示带有文本的屏幕快照,则这些功能是专业功能,但并非必需。 如果您有水平屏幕截图,只需上传它们,AppToolkit就会调整屏幕截图的框架和文本。 在屏幕截图上方编辑所需的文本,重点关注应用程序要解决的问题。 编辑背景颜色以补充应用程序屏幕颜色或上传您喜欢的背景图像。 AppToolkit中即将推出的功能将包括基于图标颜色或上传的屏幕截图中的颜色的建议背景颜色。 因此,将有一个选项可以上传从一个屏幕截图到下一个屏幕截图的连续背景图像,并在用户从左向右滑动时创建一个流程。 完成第一个屏幕截图后,您可以转到屏幕#2、3、4和5。请确保按所需的顺序从左到右对其进行组织,以便可以看到它们的外观。应用商店。 如果要在不同的幻灯片上的屏幕快照的上方和下方都显示文本,请确保交替进行操作,在第一张幻灯片的上方显示文本,在第二张幻灯片的下方显示文本,在第三张幻灯片的上方显示文本,等等。样式,还将帮助您转换用户。 而已。 完成屏幕截图集后,您可以下载和/或根据需要进行编辑。 如果您需要一组新的屏幕截图,则可以以每月19美元的价格设置一个专业帐户,并制作任意数量的集和版本。 很简单。 在图标之后,您放入应用商店中的屏幕截图是潜在用户看到的最重要的视觉内容。 因此,请充分利用它们,并利用它们来销售您的应用程序,以最好地解决用户的问题。 如果您查看培根使一切变得更好,则应用主屏幕让您渴望培根,我们可以为您解决该问题。 只需在这里获取培根,即可使一切变得更好 Ross Rojek是GoLocalApps的CTO 。 自2010年以来,GoLocalApps已开发并启动了90多个应用程序。最畅销的应用程序包括 Diners和Drive-Ins TV 以及 Secret Menu Starbucks Pro Edition 。 在Twitter上关注他 @golocalapps

在Bitrise上为Cordova和Ionic项目引入自动预配置

现在,可以在 Bitrise 上分离Cordova和Ionic项目的准备阶段和构建阶段 ,因此您也可以对这些项目类型使用iOS Auto Provision步骤。 -! 我们最近发布了iOS自动配置步骤,该步骤可管理Xcode项目的iOS配置配置文件。 该步骤使iOS的代码签名更加容易:您只需上传iOS开发和发行证书,该步骤将处理Provisioning Profiles。 该步骤分析iOS Xcode项目(或工作区),以确定签署该项目需要哪些Provisioning Profiles。 Cordova和Ionic的构建步骤(Cordova存档和Ionic存档)使用Cordova和Ionic CLI生成本机项目(通过调用platform rm和platform add命令)并进行构建(通过调用build命令)。 与在工作流中运行Cordova archive和Ionic archive步骤之前一样,本机iOS Xcode项目不存在,因此自动配置功能不适用于这些项目类型。 为了让您的生活更轻松,我们进行了一些更改以使其正常运行: 1.分开的Cordova / Ionic项目的准备和构建阶段 Ionic和Cordova存档步骤都有输入: Should remove platforms as prepare step? ,它控制是否应在构建阶段之前删除并重新添加本机平台。 通过将此输入设置为false ,该步骤将不会触摸生成的本机项目。 2.为Cordova / Ionic项目的准备阶段创建了新步骤 我们在构建步骤中关闭了平台删除功能,但是我们还必须注意准备过程。 从现在开始,您可以使用: 和 脚步。 新的准备步骤可以通过调用platform rm和platform add命令从您的Cordova和Ionic项目生成本机项目。 3.更新了 iOS Auto Provision 步骤 最新步骤版本(1.1.2)导出 项目的开发团队 已安装的代码签名标识的名称 已安装的配置文件 这些输出可用于提供“ […]

使您的发展更好。 使用代理。

在本文中,我想描述如何使用Charles桌面应用程序设置代理。 我相信你们中的许多人都使用API​​或使用一些REST服务。 如果您还没有听说过代理,我相信这篇文章中的知识将对您的未来发展有用。 以下示例涉及iOS环境以及在macOS系统上进行配置。 什么是代理? 为了告诉您什么是代理服务器,我使用在Charles文档中找到的定义 HTTP代理是一种服务器,它从您的Web浏览器接收请求,然后代表您向Internet发送请求。 然后将结果返回到您的浏览器。 因此,Charles应用程序是一种监视器,用于检查您的网络流量,代表您执行所有请求并将响应返回给您。 我真的需要吗? 是! 当您创建使用某些API的应用程序时,它可能会对您有所帮助。 您将可以查看服务器的请求和响应。 此外,Charles应用程序允许您为端点设置断点,并允许您编辑请求或响应正文,因此您可以为应用程序测试各种方案。 同样,您可以看到您的应用程序确实有多少请求。 如何配置Charles? 首先,转到Charles网站并下载安装文件。 安装过程完成后,您将看到应用程序的主屏幕。 开始时,我建议选择顶部的“ Sequence选项卡。 一段时间后,您应该会在Mac上看到所有您执行的请求。 现在,我们有两种方法来配置Charles。 第一种方法是为iOS Simulator配置它。 第二个选项是为iOS设备配置Charles。 iOS Simluator配置 单击帮助-> SSL代理->在iOS Simualator中安装Charles Root证书。 您将看到提示: 然后单击确定,并确保您应该重新启动模拟器。 完成上述步骤后,Charles便已配置好并可以与您的模拟器一起使用。 iOS设备配置 在设备的Wi-Fi连接设置中,选择与Mac使用的连接,然后点击。 然后向下滑动,然后选择“代理设置为手动”。 在IP字段中,请输入您Mac Wi-Fi使用的相同IP地址。 在port字段中,输入8888 。 要在Mac上查看Wi-Fi的IP地址,请执行以下操作: 在Mac上的wifi图标上用选项按钮右键单击 然后在您的iOS设备上访问http://www.charlesproxy.com/getssl/并安装证书。 我建议通过Safari进行操作,因为它会将您从URL重定向到iOS设备上的“证书设置”。 然后只需安装证书。 安装过程完成后,您将能够在Mac上的Charles应用程序中查看来自iOS设备的所有请求。 好的,所有配置都可以,但是如何使用呢? 配置流程完成后,您将看到Charles主窗口以及您的网络数据。 出于这篇文章的目的,我编写了一个简单的应用程序,该应用程序使用了免费的rest API https://www.freegeoip.net/ 。 该API为我们提供了有关任何域的一些地理信息。 例如: […]

仅使用iPhone对React Native应用进行编程

我是工作狂 我不会轻易说出来。 暂停开发我的应用程序对我来说是令人难以置信的压力和困难,尤其是在有很多事情要做的时候。 因此,当我发现与父母和女友进行为期10天的欧洲之行时,我非常担心牺牲宝贵的工作时间。 那应该是我对欧洲假期的最初反应吗? 可能不会。 但是我对自己下定决心,只要有空闲时间或每个人都入睡后,我仍然可以完成一些工作,因此我仍然可以取得一些进步。 这是双赢! 我仍然可以在意大利和法国旅行并享受我们的郊游,而且我仍然可以完成一些工作。 但是出现了一种新的并发症。 乘飞机的早晨,我发现无法携带笔记本电脑。 现在我们有一个问题。 我知道我必须适应。 您可能会猜到我根据标题决定尝试的内容。 没错,我可以想到的处理任何代码的唯一方法是,如果我在iPhone上找到了一种相对有效的编码方法。 这是我的方法。 进行设置 几次Google和App Store搜索后又经过几次反复试验,我确实在飞机起飞前几个小时就整理好了设置! 我需要的第一个也是最重要的应用是Github客户端,它允许我执行以下操作: 访问我的应用的私人Github存储库。 在其上添加和编辑任何文本文件。 拉,推和提交我对其所做的任何更改。 我发现有很多应用程序可以让您查看项目,但是只有少数应用程序支持编辑。 在尝试了一些选项之后,我决定使用工作副本。 它满足了我的所有要求,拥有一个性感的用户界面,拥有157个评分,平均评分为4.8星,而且我什至可以免费试用! 我非常喜欢它,我觉得值得为专业功能付费。 为了使事情变得更好,开发人员仍然非常活跃,并定期发布更新! 感谢您提供出色的移动Github客户端Anders Borum。 您值得一枚金牌! App Store链接:https://itunes.apple.com/us/app/working-copy/id896694807?mt = 8 我的移动设备设置中唯一缺少的部分是自定义键盘,可让您尽快输入代码。 物理智能手机键盘之所以售罄,是因为我们没有时间停下来购买,因此唯一的选择是下载自定义iOS键盘。 虽然我经常下载并尝试新的有趣的应用程序,但我并没有探索许多自定义键盘。 我从未感到有必要冒险超越Google的GBoard(这是最好的)。 我试用了一些开发键盘,并认为CodeKey Pro是适合该工作的键盘。 用最少的偶然键盘按键,对我来说感觉最好。 它还根据您设置的语言提供自定义快捷方式。 就我而言,我使用Javascript是因为我的应用程序是基于React Native构建的。 感谢您在我的移动开发设置上的精采,Abhinav Dimri! 应用商店链接:https://itunes.apple.com/us/app/codekey-pro-custom-keyboard-designed-for-programmers/id1054647516?mt=8 和繁荣,我准备在旅途中编写代码! 温馨提示:虽然没有必要,但在旅途中带上外接电池很方便。 “但是阿明! 您是如何测试代码的?” 我没有 这不是最佳实践,但是我所能做的就是编写代码,仔细检查拼写错误,并在回来时进行调试。 也许可以使用Expo的移动应用程序来运行该应用程序(我不使用Expo,所以我不知道),但是我的React […]

适用于iOS应用程序的Bitrise Fastlane集成

有关如何将fastlane(iOS和Android的CD工具)集成到Bitrise中以及如何在 Bitrise 上运行相同命令的 逐步指南 。 Moses Kim的来宾帖子。 原始帖子出现在 Shakuro博客上 。 本文基于对移动开发人员Sergey Laschuk和Ruslan Krohalev的采访。 摩西是Shakuro数字产品代理商的作家。 他喜欢研究技术,体验设计和武术。 在自动化测试以及构建Web和移动应用程序的部署方面,有几种完善的持续集成服务。 然而,Bitrise在2017年获得了广泛的宣传,并拥有在2018年获得更多关注的所有好机会。 什么是Bitrise Bitrise是一个主要致力于移动开发的持续集成平台。 持续集成(CI)是在特定的时间表上将开发人员构建副本合并到共享主线的一种普遍接受的做法。 换句话说,这是一个用于版本控制和复制部署的工作流,而不会失去对开发过程的跟踪。 Bitrise允许创建包含构建步骤的多个工作流程。 一个应用程序可以为其定义多个工作流程,还可以使用webhook来指定为哪个触发器(webhook)选择了哪个工作流程。 映射到工作流程的触发器使用预定义的工作流程启动构建。 对构建步骤进行编程,以执行由命令行脚本实现的各种功能。 记录所有虚拟机构建步骤,以保留工作流每一步的信息。 我们与Bitrise合作的项目 Bitrise允许Jira集成,这对我们来说是个不错的选择,因为要实现的所有功能,时间跟踪和估算都是由我们公司的Jira运行的。 构建自动化 到目前为止,我们已经在两个主要的移动开发项目上使用了Bitrise,其中一个是已经在App Store上运行的iOS应用程序。 凭借每天生成的新版本,Bitrise可以自动将主版本更改货件自动交付给App Store测试。 工作流还配置为仅在实施更改后才交付新的版本。 因此,产品负责人仅收到有关已发货的重要产品的信息。 测试自动化 新功能会自动进行测试,如果发现错误,则不会提供任何构建。 最新的Bitrise功能之一允许在设备模拟器上运行功能用户测试。 如果这些单元测试中的任何一个失败,则通知将直接发送给开发人员。 对于我们的一个iOS应用,每天都会从项目GitHub存储库上的提交收集所有消息。 在本周或冲刺结束时,或在具有里程碑意义的情况下,产品负责人(客户)提出了对修补程序的描述以及添加到内部版本的新功能。 提交随附的文件中列出了所有功能和修复。 这些描述的组合由Bitrise自动化。 总而言之,每次上传到TestFlight最多需要1个小时。 但是,由于它是由Bitrise虚拟机完成的,因此对我们来说不算什么。 什么是快车道 Fastlane是适用于iOS和Android的持续交付工具。 Fastlane是用红宝石编写的工具,可以通过红宝石宝石安装。 与Bitrise一样,Fastlane也有构建步骤,称为“动作”。 每个动作都是必须执行才能获得某种结果的任务。 可以将所有Fastlane动作收集到称为Lanes的单个实体中。 泳道就像Bitrise中的工作流。 当在Fastlane中运行通道时,如果任何一个操作执行不正确,则会执行该通道中的每个操作,并且构建失败。 通道在称为Fastlife的文件中定义。 在所有类似方面,Bitrise和Fastlane并不冲突且彼此重复,但是正如我们发现的那样,Fastlane可以大大补充Bitrise在移动开发项目中的参与。 […]

自学成才的软件开发人员:为什么开源对我们很重要

这是一个关于我对开源的看法如何随时间变化以及如何对我的职业生涯产生帮助的故事。 开源简介 大约13年前(在高中时),一个朋友(Netcyrax)向我介绍了开源社区。 他向我介绍了有关开放源代码及其运行方式的所有内容。 然后,他给了我一张Ubuntu CD,并告诉我Ubuntu正在通过发送免费副本来推广其操作系统。 第二天,我使用56k连接访问了www.ubuntu.com,并订购了50份Ubuntu。 我的意图是将它们出售给其他人,而不是免费提供。 那是15岁的我,我不了解开放源代码的目的。 无法理解目的 然后我开始编程。 我已经知道了开源,但实际上我不明白为什么我必须共享我的宝贵代码行。 为什么免费共享我花了几个月时间开发的程序源代码? 如果有人偷了怎么办? 如果我的“竞争对手”使用我的源代码来改进他们的产品怎么办? 当时我不明白的是,我不是一名杰出的软件开发人员,我的程序可以由经验丰富的软件开发人员在几天之内(而不是几个月)从头开始开发。 使用开源库很方便 是2008年,我有了第一部iPhone(3G)。 苹果宣布推出iOS 2和iOS SDK。 我决定(在业余时间)成为一名iOS开发人员。 由于还没有人使用过iOS SDK,因此我不得不自己学习开发应用程序。 我使用WebView创建了一个简单的应用程序,并且业务逻辑在使用JavaScript构建的Web应用程序内部。 我对iOS SDK感到非常失望(菜鸟开发人员+ Objective-C +手动引用计数=灾难),因此我暂停了本机iOS开发两年。 同时,我正在试验混合的SDK,例如Titanium,Adobe Air-ActionScript。 当我回到iOS 5(回到本机)时,一切都不同了。 在大约一个月的时间里,我设法构建了第一个真实的应用程序并将其上传到App Store。 但是发生了什么变化(自动引用计数除外)? 答 :iOS开发的开源社区。 ASIHTTPRequest(用于网络请求)和SDWebImage(用于下载和缓存图像)帮助我构建了第一个应用程序。 版本控制和GitHub 大多数开源项目和库都托管在Github上。 所以我当时使用Github下载我的库,但是由于我是在业余时间编程的,并且没有商业环境的经验,所以我不能说Git和Github之间的区别。 在构建了一些iOS应用之后,我对自己的技能充满信心,因此我决定申请iOS机会。 在第一次面试中的某个时刻: -访者:您使用什么版本控制? 我是什么意思版本控制? -访者:我的意思是您如何保留代码库的版本? SVN? 吉特? -Me:时间机器(OS X的备份软件)! 因此,在与访问者进行了交谈之后,我决定我想了解更多有关Git(以及一般而言的版本控制)的知识,并希望在自己的项目中使用它。 我阅读了很多有关Git的文章,以及如何在团队中使用它。 我学会了在BitBucket存储库中使用“提交”和“推送”。 我将其用作代码的备份和版本控制,但不用作协作工具。 […]

使用SVG在iOS应用中实现分辨率独立性

拥有各种尺寸的设备非常适合允许用户选择适合自己的设备,但是支持分辨率和像素密度的所有这些组合可能很麻烦。 即使您以某种矢量格式开发所有原始图稿,通常也必须以各种尺寸和密度将其导出为PNG格式。 如果您的应用程序中只有几个图像,这可能是可管理的,但是随着图像数量的增加,它很快就会变得笨拙而乏味。 另外,如果您有任何全屏(特别是iPad尺寸)图像,则以多个密度包含同一图像的冗余副本将迅速增加应用程序的总体存储空间需求。 另外,您也可以直接在应用程序中使用矢量图像。 此时,Xcode支持的唯一矢量格式是PDF。 您可以将PDF添加到资产管理器,它会按预期显示在Interface Builder中。 但是,在构建应用程序时实际发生的事情是,这些漂亮的矢量图像在编译时就被光栅化了。 因此,在运行时,您仍在处理固定大小的PNG图像。 这意味着您仍然受制于多个冗余映像的空间开销。 而且,如果您的应用在运行时对图像大小执行任何操作,您仍然会注意到一些像素化。 这就是SVG出现的地方。 救援的SVG 如果您还不熟悉SVG,它是一种基于XML的矢量图像格式,这意味着即使与PNG相比,它的文件大小也相对较小。 作为矢量图像,它仅包含用于重绘图像的指令,而不包含实际的图像位图数据。 只需说一句,您只需在应用程序中包含一个SVG副本。 这可以大大减少应用程序的存储需求,并简化应用程序图稿的管理。 由于Xcode不支持SVG,因此您需要找到第三方库才能将SVG支持添加到您的应用中。 我在最新的iOS项目中一直使用的是SVGKit。 它具有一个缓存系统以减少解析SVG文件的开销,并且它使用CoreAnimation层进行渲染以避免大多数性能问题。 使用Interface Builder进行布局 如果要使用Interface Builder设计布局,则可以为SVG添加图像视图,但是直到运行时才能看到图像。 由于Xcode和Interface Builder不直接支持SVG,因此,我们将不得不采用一个小的解决方法。 1.在Interface Builder中,将新的View对象添加到您的界面中(这在可用对象列表的结尾附近)。 2.像往常一样将此新视图约束到其他视图。 使用矢量图像的好处是您可以灵活选择尺寸。 但是,我仍然建议添加与源图像的宽高比匹配的宽高比约束。 这将防止图像因其他约束而失真。 3.将视图的类更改为SVGKFastImageView 。 这不会影响其在设计时的外观,但是当在运行时加载笔尖时,视图将是此类的一个实例。 4.将IBOutlet添加到视图控制器类,并将其连接到在步骤1中添加的视图。 5.用代码将所需图像加载到视图中。 例如: 请参阅完整文章中的代码。 使用代码进行布局 如果要通过在代码中构造视图对象来设置界面,则该过程可能与您已经在做的事情有点相符。 这样的事情将为您提供SVG图像视图并将图像加载到其中: 请参阅完整文章中的代码。 尽管上面的代码可以工作,没有任何限制,但是图像将根据SVG的内部尺寸进行调整。 因此,您仍然需要添加一些约束来控制图像大小。 如果您要添加更多其他相同的具有不同大小的图像视图,则可以看到图像可以缩放而不会降低质量: 其他提示 如果发现加载SVG图像时布局变得混乱,请尝试使用抗压缩性和内容优先的图像视图。 通常可以将它们设置为1(最小值),以确保图像视图仅从其他约束中获得其大小,而不从其固有大小中获得。 最后,由于我项目中的SVG混合了明暗,大大小小的等等,因此尝试在Finder中预览不是一件容易的事。 因此,我使用以下脚本来生成一个HTML页面,其中包含当前目录中所有SVG图像的预览。 随意使用它,并根据需要对其进行调整! 请参阅完整文章中的代码。

App Store 2018提示和清单

Apple的App Store在2017年9月启动iOS 11时进行了重大修改。多年来,移动设备上的App Store看起来相同,并提供功能和顶部图表部分,但现在所有这些都已更改。 苹果公司解释说,更改是为了使应用程序在App Store中更容易被发现。 用户可见的主要变化是: 1)没有收益图表。 2)应用程式和游戏有不同的热门排行榜。 3)新的“今日”部分与编辑人员故事一起手动策划。 4)在应用内购买的应用,作为单独的产品在App Store中进行。 UI的更改也着重于为用户提供更好的体验。 这些更改包括: 1)较短的应用名称和新的字幕字段。 2)自动播放视频预览。 3)用户在搜索中看到三个垂直屏幕截图(之前两个)或一个水平屏幕截图(之前一个半)。 4)由于评论已移至顶部,因此更加重视评论。 5)还有更多查看顶部图表的步骤,它会影响该部分的受欢迎程度。 在主要部分,免费和付费图表仅显示三个应用程序/游戏。 6)开发人员现在可以显示多达10个屏幕截图(以前只有5个),以向客户展示更多的应用程序体验。 那么如何从App Store 2018中获得最大收益呢? 从App Store Optimization(ASO)的角度来看,App开发人员应确保: 1)他们的应用标题受新应用名称限制(最多30个字符)。 现在无需使用关键字向应用标题发送垃圾邮件。 使其简洁明了。 2)应用程序元数据中使用了新的字幕字段。 使用应用字幕来吸引用户的号召性用语(例如,立即下载应用)。 它可以导致20%的下载量。 (来源,splitmetrics.com) 3)对于垂直屏幕截图文本,请使用较大的字体。 以前使用的任何字体大小都应该增加,因为即使在较大的iPhone X熨平板上也很难阅读文本。 4)添加新的Apple API来收集应用程序中的评论。 它将大大增加评论量(根据Apptentive最多可提高30%)。 现在,用户每年仅需3次即可进行应用审核,因此请明智地要求进行审核。 最好的时机是让用户体验到积极的情绪后再查看您的应用。 用户可能会在您的应用中获得任何形式的奖励或赢得级别之后。 当用户赢得胜利时,他们更有可能对您的应用进行正面评价。 5)填写新的促销文本字段。 它没有建立索引,但是是在应用程序中宣布交易或销售的好地方。 目前,应用程序描述页面在通过审核过程后不可编辑。 促销文字字段应用于以后可能发布的所有公告。 促销文字显示在应用程序描述文字的顶部,从用户角度看,它就像一个字段。 6)将所有丢失的元数据添加到应用内购买中,以使它们符合Apple的功能。 推广的应用程序内可见,可以通过App Store搜索或在应用程序页面上购买。 7)与以前的仅限屏幕截图版本相比,制作出色的预览视频并评估应用程序页面性能(通过iTunes Analytics)。 自动播放的视频可以为您的应用(尤其是游戏)获得更多下载。 […]

学习Swift和iOS开发第13部分:关于版本控制

想象您正在处理一个个人应用程序项目。 您刚刚击倒了三只红牛,并且感觉(根据字面意思)生产力过高。 您逐行编写代码,开始看起来好像您正在构建的新功能已接近完成。 据您所知,由于缺乏愚蠢的测试,在3,498行附近某个地方创建了一个严重的错误,它将导致您的应用程序出现重大问题。 从那时起,您已经编写了5,000行代码! 当然,您会整夜试图找到该错误的来源。 至少你喝了那些红牛……😳 从不畏惧! 这是版本控制突袭并保存一天的地方。 现在让我们回到故事的开始:假设您正在开发一个个人应用程序项目,并为您的项目设置了版本控制。 您所做的每项重大更改都会推送到远程服务器。 您还要编写另一部分重要代码,并将其也推送到远程服务器。 这将一直持续到您多次推送代码为止。 突然,您在代码中发现一个严重的错误。 不必解析整个代码库,我们可以恢复到代码所处的先前状态。 真好 👌 关于吉特 如果您喜欢视频说明,我们专门为您准备: 在进行版本控制之前,Sam不得不以某种方式将其更新的代码文件发送给Pete。 然后,Pete将不得不识别并复制并粘贴Sam的更改到他的项目中并保存它。 然后,Pete必须将包括他的更改的更新的项目发送回Sam,以便他们俩都可以拥有当前项目: 这种情况仅发生在两个开发人员之间。 想象一下,随着更多的开发人员团队,此问题的复杂性如何增加! 版本控制的工作方式 如前所述,版本控制是一种出色的方式来备份您的代码库,并在需要时能够还原到以前的更改。 这也使与他人的合作更加轻松! 想象一下一个拥有三个开发人员的开发团队,他们分别是Jim,Sam和Harry。 他们都在开发应用程序并实现各种功能。 Jim首先编写一些代码,然后将其保存到他的项目版本中。 山姆也一样,哈利也一样。 现在,它们三个都具有相同应用程序的不同版本: 现在,Jim现在可以将其更改提交(推送)到远程服务器: 完成后,Sam可以访问远程服务器并提取Jim的更改。 版本控制会自动合并Jim对Sam项目的更改: 这两个项目现已合并。 现在,Sam可以将其独特的更改(包括Jim的更改)推回远程服务器,以便其他开发人员可以访问更新的项目: 初级开发人员Harry现在可以将项目下拉至本地计算机,进行更改并添加其功能,然后将其代码推送至远程服务器以将其合并并更新项目: 包起来 当单独工作或与团队一起工作时,版本控制显然非常有用。 它是高效的,有效的,并总体上改善了开发过程。 手动发送,合并和重新发送代码的日子已经一去不复返了。 Git是一个非常有用的学习工具。 在下一篇文章中,我们将学习Git的基础知识。

iOS订阅很难

使用正常的IAP流程进行购买 除了不同的用户界面副本外,购买订阅产品与购买非订阅应用内产品相同。 不同之处在于,订阅产品将续订,稍后会在StoreKit队列上生成未经请求的交易。 订阅应用内交易在收据数据中也有一个expiration_date字段。 您将使用此字段来确定用户有权获得哪些产品或服务。 设备上收据验证 为了保护自己免受IAP盗版并提取用户的交易历史记录,您需要验证您的App Store收据。 如果没有服务器,则可以在设备上执行此操作。 我不会在这里介绍整个过程,但是我过去已经写过。 Apple不提供用于验证收据文件的内置方法。 他们认为,这些内置方法将仅成为IAP破解程序的目标。 相反,他们建议每个人都自己滚动,以确保标准的IAP破解程序不会破坏您的应用程序。 但是,用于验证设备上的收据文件的代码并不简单。 解析到期日期 解压缩收据文件后,您只对最新的expiration_date感兴趣。 通过遍历收据中的所有应用内购买记录并找到最新的expiration_date字段,然后将其缓存(通常在NSUserDefaults或类似方式中),可以提取此内容。 处理续订交易 处理续订是常见的错误区域。 在标准IAP流程中,您只需要担心用户完成购买时StoreKit付款队列的状态。 有了订阅,您的应用程序需要随时准备处理这些交易。 现在,您需要从应用程序中的任何位置处理购买; 需要在每个屏幕上考虑用户订阅状态更改的影响。 处理该问题的适当方法是:一旦它出现在StoreKit队列中,请验证收据并更新用户的权利。 但是,这可能很困难。 例如,如果您的应用程序有一个帐户系统,那么您如何处理没有用户登录时发生的交易? 或者考虑发生在某个流的中间的事务,该事务取决于用户的订阅状态。 设计应用程序时,您必须计划所有这些可能性。 设备端订阅中的差距 设备端收据处理使一些重要的事情变得困难或不可能。 首先,您的订阅状态被困在设备上。 如果您想将服务扩展到当前应用程序之外,则需要针对用户的当前订阅状态设计一些精心设计的转义计划。 将订阅处理限制在设备上也会使您难以理解您的业务绩效。 iTunes Connect已经变得更好,但是如果您想逐个用户了解任何内容,则仍然缺少iTunes Connect。 苹果公司的所有仪表板都完全匿名。 如果只需要鸟瞰,汇总指标就可以了,但是使用Apple的仪表板,即使是简单的数据问题,您也将很快无法回答。 我认为避免仅设备订阅的实现的最大原因只是受StoreKit队列的支配。 如果由于某种原因您的代码或StoreKit出现故障,您可能会错过一笔交易。 这可能会剥夺付费客户或其服务。 如果仅使用设备端订阅,则可能很难调试或补救这种情况。 使用服务器确实很有意义。 服务器订阅 使用服务器意味着:您无需在设备上解析收据,而是将该收据发送到服务器以进行验证和解析。 在设备上,实现与设备端订阅的实现类似,但有一些关键更改: 正常的IAP流量 收据被发送到服务器进行验证,解析,存储并返回数据 服务器响应存储在设备上 续签交易的处理(半可选) 将收据发送到服务器 步骤2表示与设备端订阅最根本的不同。 您可以通过HTTP将收据发送到服务器,而不是在应用程序中实现收据解析和验证。 这样做有两个明显的优点: 您可以使用Apple的/verifyReceipt端点 […]