Tag: ios

使用Xcode 8的FastLane的新Build设置来理解

我已经构建并负责管理我们iOS移动研究工作的构建管道。 我们运行3个不同的版本: Alpha , Beta ,将每个版本发布到不同的输出: HockeyApp,TestFlight,AppStore 这些释放点中的每一个均由对不同git分支的提交触发。 提交开发内容将自动将构建版本发送给Microsoft HockeyApp ,提交给master的提交将自动构建应用程序的两个版本,一个版本自动发送给Apple TestFlight ,同时准备一个稍有不同的构建版本,我们可以手动将其部署到Apple App Store 。 为了使事情变得更加有趣,我们的一些项目使用了两个独立的应用程序目标,这使我们共有六种不同的配置。 当我将构建服务器和项目过渡到Swift 3和Xcode 8时,构建配置不再能很好地工作。 苹果对新版本的Xcode中的代码签名和配置方式进行了一些更改,因此我不得不更新流程。 构建通道的核心是快速通道,我们使用它来自动执行该过程的大多数步骤。 手动签名 我最初的希望是,可以将项目文件设置为“自动签名”,然后当它到达CI服务器时,服务器将重写项目文件中的所有必要字段,以将其转换为手动签名。 这是可能的,但是如果您在项目中同时拥有框架和应用程序目标,则将变得相当困难-在某些软件中就是这种情况。 因此,我们坚持使用手动签名进行所有操作。 借助“手动签名”,我们需要手动管理我们的配置文件-可能会有些麻烦-但至少我们有一个很小的团队,因此目前可以管理。 我的目标之一是确保快速通道过程是非破坏性的,这意味着您可以在开发机器上运行它,并且不会破坏您的项目。 因此,高级流程是存储现有的构建设置,然后根据需要重新连接项目文件,进行构建,然后将项目还原到以前的状态。 捆绑ID和其他唯一字段 我们的三个构建路径中的每一个都有一组唯一的字段。 例如,每个应用程序的捆绑ID必须是唯一的。 另外,每个捆绑包ID都有其自己的唯一供应配置文件供应-连接到与该内部版本关联的Apple开发者帐户。 因此,对于发行版,我们使用主要的开发人员帐户,而在beta和alpha测试中,我们使用企业帐户进行签名。 现在,配置文件存储在以下构建设置中: PROVISIONING_PROFILE_SPECIFIER,因此使用xcodebuild,grep和awk的组合提取此值 #使用XcodeBuild | Grep | Awk | 提取提取配置文件名称的信息 EXISTING_PROFILE = sh(“ xcodebuild -project#{PROJECT_FILE_PATH} -scheme#{SCHEME} -showBuildSettings | grep PROVISIONING_PROFILE_SPECIFIER | sed […]

Apple推送通知证书(iOS推送通知-第一部分)

2.生成证书签名请求。 您可以从Mac上的钥匙串访问应用程序生成此文件。 按照下面给出的快照: 3.注册您的Apple设备 在Apple开发人员控制台上,单击设备→全部,然后按照下面给出的快照进行操作:

通过iOS上的网络链接共享文件

iOS爱好者的绝妙新闻! 新的软件更新使您可以通过Web链接直接从Lima应用程序共享文件。 通过点击文件,您可以使用新的“共享链接”按钮并直接从智能手机与他人共享文件。 您可以通过电子邮件发送所提供的链接,进行消息发送,复制和粘贴它,以及根据需要共享任何图片,电影或文档。 收到链接时 另一方面,您的朋友会收到一个访问内容的链接。 然后,他/她可以从任何设备“下载”文件。 而已! 这么简单 您可以同时发送多个文件 一次共享几个文件之前,要做的第一件事是将文件压缩在一起。 这样,Lima会将它们视为一个文件。 如果更改文件名或将其移动到另一个文件夹,则将使链接不可访问。

夏季第一天-测试驱动开发

今年夏天,我手上有很多时间,所以我将尝试学习尽可能多的东西。 然后,我将写下我的日常成就和发现。 我是奥本大学的软件工程系学生。 我是一名大四学生,将于今年12月毕业。 我在Co-Op担任iOS开发人员方面有相当多的经验,并且对Android和Web开发感到满意。 我今年夏天的目标是为求职面试官做准备,并尽可能多地学习。 我真的很想深入iOS世界,很少有我真正想要从事的项目。 因此,事不宜迟,这里是我今天学到的东西。 我正在开发一个应用程序,该应用程序将使用Spotify为专辑,歌曲和歌手提供的应用程序网址来规避Spotify上10,000首歌曲的限制。 这个想法是,如果您将相册添加到我的应用程序中的列表中,则只需单击我的应用程序中的相册,即可将您带到Spotify中的相册。 这样,您可以根据需要添加任意数量的相册。 我要做的第一件事是使用“测试驱动开发”编写应用程序。 我听说过罗伯特·马丁(Robert Martin)的“ 清洁代码”中的做法(强烈建议未读过的任何人),但我从未用它来构建任何东西。 我主要关心的是测试异步网络代码。 但是,经过一番挖掘,我找到了Apple的这篇文章: 测试期望的异步操作 异步操作是不能在当前代码流中直接执行的操作。 可能是…… developer.apple.com 通过使用XCTestExpectations,您可以使测试等待一定的时间,以查看应用程序是否具有XCTAssert函数。 如果确实符合XCTAssert,则会对其进行评估,然后测试通过或失败。 这样就不会浪费时间,测试只需占用网络通话的时间。 然后,我开始将我的应用程序与Spotify集成在一起。 我决定从登录页面开始,因此我按照Spotify开发人员网站上的说明将我的应用程序与他们的平台集成在一起。 我已成功登录并且会话正常运行。 该应用程序将打开Spotify以登录到该应用程序,然后将其重定向回您的应用程序。 我了解到可以使用“应用程序URL”执行此操作。但是,我不知道如何执行此操作,但是可以使用以下文章来学习: 如何使用自定义URL打开iOS应用 本教程向您展示如何使用自定义工具从iOS应用程序内或从野生动物园浏览器中打开另一个iOS应用程序… kitefaster.com 我还在Github上设置了我的应用程序,并将其开源,以供所有人使用。 链接在这里: harrysummers /无限图书馆 通过在GitHub上创建一个帐户为Infinite-Library开发做出贡献。 github.com

核心数据:正确入门

核心数据是Apple为macOS和iOS设计的框架,可持久存储对象。 它本质上是SQLite的抽象。 Apple提供了有关Core Data的综合指南,但鉴于其复杂性,可能需要一段时间才能通过。 在这篇文章中,如果您要构建现代应用程序,我将介绍正确入门的基础知识。 我还将介绍核心数据的一些重要方面,这些方面可能并不明显,但在许多教程中经常被忽略。 设定 因此,您刚刚在Xcode中创建了一个新项目,并选中了“使用核心数据”复选框(如果没有,则将丢失文件,请查看下一段以获取详细信息)。 默认情况下,Xcode将与Core Data相关的方法添加到您的AppDelegate类。 如今,这样做是一种不好的做法。 在我看来,您的AppDelegate应该只管理应用程序的生命周期。 多年来,Core Data变得越来越复杂和强大,因此最好将数据存储代码放在单独的类中。 绝对从AppDelegate中删除以下内容: //标记下的所有内容:-如果使用Swift,则为核心数据堆栈; #pragma标记下的所有内容;如果使用Objective-C,则为核心数据 堆栈 。 未选中“使用核心数据” 如果在创建项目时未选中“使用核心数据”复选框,则您的AppDelegate应该是干净的,您只需要创建一个文件:数据模型即可。 在项目浏览器中右键单击您的主项目文件夹,然后单击“新建文件…”,选择“ iOS”>“核心数据”,然后单击“数据模型”,然后单击“下一步”,然后按照步骤保存文件。 实体 我不会花很多时间谈论创建实体和关系,因为它很简单,没有技巧,并且有很多很棒的指南,例如tutsplus博客或objc.io博客。 还可以查看江豪的关于创建实体和关系的文章。 打开.xcdatamodeld文件,您应该具有如下所示的内容: 只需单击屏幕底部的“添加实体”按钮,即可随意添加一些属性,更改实体名称并使用编辑器。 现在,最重要的部分是将您的实体映射到类。 选择您的实体,然后在导航栏中单击“编辑器”,然后单击“创建NSManagedObject子类…”: 选择对象模型,然后选择实体并创建文件。 如果使用Swift,将为您创建两个文件(如果使用Objective-C,则为四个文件)。 一个类将是NSManagedObject的子类 。 此类仅应包含对象的方法,另一个应为该对象的扩展,并且应包含属性(请注意,相反的方法也可以,您可以在NSManagedObject子类上具有属性,而在扩展上具有方法)。 我的理解和对此可能是错的,因为我们将它们分开以保持清洁。 例如,您可以拥有一个插件,该插件可以在更改模型时自动重新生成实体类,而不会覆盖您的方法。 数据存储单例 现在,您应该创建一个新的单例类,该类将为您的应用程序提供数据管理方法(因为我们已从AppDelegate中删除了这些方法)。 如果您没有时间阅读我的文章,可以在这里找到一个很好的Objective-C示例:https://gist.github.com/NachoMan/922496。 但是请知道,此代码是非ARC的,因此,如果要在iOS应用中使用它,则只需摆脱–(void)dealloc方法。 如果您有时间,请查看下面的“ 线程”部分,这很重要! 苹果还展示了在Objective-C和Swift中可用的稍微复杂一点的单例。 如果您有几分钟的时间,那么让我们逐一介绍一下单例所需的方法(在Swift中): 物产 让我们从一个具有以下属性的新类开始(自行替换字符串): ManagedObjectModel ManagedObjectModel本质上是从.xcdatamodeld文件加载的数据模型。 只需将“ MyApp”替换为模型文件的实际名称即可。 现在您可能想知道扩展名为什么是“ momd” ,这是因为我们要引用模型的编译版本,而您无法在“项目浏览器”中查看该版本。 将以下内容添加到您的DataManager类中: […]

Swift 3.0类说明—扩展名,GCD,WebView,下载图像,JSON

主讲人:魏炜 延期 可帮整体类别(已知类别)加新的属性或方法 GCD 图片来源:Wei Wei 主执行绪处理UI的工作 两种方式工作模式 sync同步(做完再做下一个) async不同步(同时多工) 所以主执行绪不能放同步的工作,因为会阻挡UI的进行 串行队列与并发队列 更多:Swift的Grand Central Dispatch教程:第1/2部分 dan12411 / HelloGCD 通过在GitHub上创建一个帐户为HelloGCD开发做出贡献。 github.com 网页浏览 显示网页的特定方法:Safari / UIWebView / WKWebView / SFSafariViewController UIWebView / WKWebView连网的顺序:网址-> URL->请求-> WebView 连到非苹果的网页,要设定开起权限 UIWebView:直接拉WebView到故事板 WKWebView:用程式码写WebView,需汇入WebKit,效率比UIWebView好 Safari:连网顺序URL->:Safari iOS 10以上版本:UIApplication.shared.open(URL,选项:[:],completionHandler:无) 以前的版本:UIApplication.shared.openURL(url) SFController:需汇入SafariService,连网顺序URL->产生Controller->推出Controller 介绍UIWebViewDelegate,并使用活动指示器 载入HTML或已经写好的网页 介绍用连结打开其他APP(之后似乎其他老师会在教到) 更多:iOS 9快速上手:搜寻API与SFSafariViewController dan12411 / HelloWebView 通过在GitHub上创建一个帐户为HelloWebView开发做出贡献。 github.com 下载图片 第一种方法(用Data,记得要设定背景下载) 一样用网址产生URL 用共时伫列去下载 […]

我的应用周

App Store几乎已经死了,iMessage应用程序永远都变得无关紧要了,我敢打赌,您上次下载应用程序时,它是[仅草稿:很久以前就用一种机智的说法来表达]。 但是,仍然..我喜欢应用程序。 继续,我将向您介绍5个您应该下载的应用程序 -这不是“隐藏的宝石列表”或“本周前5个应用程序”,因为该死,我只是在这里喊出几个有趣,有趣,新颖的应用程序,这些都是我本周很有趣的应用程序。 OUTTA- (笨拙,但未来)将贴纸和消息叠加到现实世界中,我需要说更多吗? 那些了解我的人知道这是我的事。 Houseparty — (我在这件事上和妈妈谈了2个小时),即使该产品在Product Hunt首次亮相后,我是否还需要提及此应用? 它做的很酷,它告诉您您的朋友何时在“房子里”,而我喜欢的人告诉我朋友在“房子”。 宇宙 – (令人困惑,但耐人寻味)此应用让我想起了Byte铁杆,但我在此应用中见过的东西我从未见过 。 这就像盯着Metatron立方体的无限空隙,就像在内衣的污渍中找到宝藏图一样,令人惊讶。 Folioscope — (90年代的互联网感觉+ powerpoint)数字翻页预订可正确处理所有事情。 易于共享,是一个庞大的社区,欢迎您出色的动画技能,这对我来说真是太难了。 Toasty — (绝对没用,绝对值得下载)该应用程序为您提供了一种敬虔的能力,可通过劫持手机的通话功能0随时以全屏照片消息打扰您的朋友。

了解iOS应用的代码签名

如果您是iOS开发人员,则很可能必须处理代码签名。 而且,如果您是初级iOS开发人员,则开发人员门户网站“证书,标识符和配置文件”部分中的所有操作可能会让您有些不知所措。 本文的目的是帮助初级iOS开发人员更深入地了解代码签名。 这不会是有关如何对应用程序进行代码签名的分步教程。 理想情况下,阅读本文后,您无需进行任何教程即可对应用程序进行代码签名。 我不打算讨论更底层的细节,但我们将讨论一些有关非对称密码的问题。 非对称密码学 您需要了解的最低要求是,非对称加密使用公共密钥和私有密钥 。 用户必须保留自己的私钥,但可以共享公钥。 使用这些公钥和私钥,用户可以证明自己确实是他本人。 可以在此处找到有关非对称密码学的很好的高级说明。 如果您想了解实施细节或背后的数学知识,可以在线找到它们。 应用程式编号 应用程序ID是应用程序的唯一标识符。 它由Apple生成的团队ID(您对此没有任何控制权)和应用程序的包ID(例如com.youcompany.yourapp )组成。 还可以有通配符应用程序ID: com.yourcompany.* 。 这些将在多个捆绑ID上匹配。 通常,您将拥有一个明确的应用ID,而不是通配符。 证明书 您可能已经注意到,要在Apple开发人员门户中创建证书,您需要上传证书签名请求。 您可以从钥匙串生成此CSR,并且此CSR包含私钥。 然后,在开发人员门户上,您可以使用此CSR创建证书。 证书可以有多种类型。 最常见的是: 开发(iOS应用程序开发)—您需要那些应用程序才能在Xcode的设备上运行您的应用程序。 分发(App Store和Ad Hoc)—您需要那些人才能通过App Store或Ad Hoc分发您的应用 APNS(Apple推送通知服务)—您需要那些能够将推送通知发送到您的应用程序的服务。 与开发或分发证书不同,APNS证书与应用程序ID关联。 有两种类型的APNS证书,用于开发-Apple推送通知服务SSL(Sandbox)和用于生产-Apple Push Notification服务SSL(沙箱和生产)。 如果要使推送通知在调试和分发版本中均起作用,则需要创建它们两者。 设备 每个会员年度每个产品系列最多可以向您的帐户添加100台设备。 100部iPhone,100部iPad,100部iPod Touch,100部Apple Watch和100部Apple TV。 要将设备添加到您的帐户,您需要添加其唯一的设备ID。 您可以在Xcode或iTunes中(比较复杂)轻松找到它。 您可以在此处找到有关如何向您的帐户添加设备的详细指南。 供应配置文件 配给配置文件是将App ID与证书以及(为了进行开发或临时分发)与某些设备相关联的内容。 您可以在Apple开发人员门户上创建配置文件,然后将其下载到Xcode中。 用法 创建所有这些文件之后,您可以转到Xcode,添加证书,刷新配置文件,然后选择所需的配置文件。 […]

我们正在杀死Next Keyboard。 这就是为什么

这是我们必须做出的最艰难的宣布之一…… 我们正在关闭 Next Keyboard 。 我们将不再支持Next Keyboard,并将停止对其的进一步开发。 换句话说,我们正在杀死它。 下一键盘将于2016年10月10日从App Store中删除。 之前我们从来没有写过这样的东西,所以我们不确定如何表达它。 我们仍然为自己的所作所为以及推动它发展的情感和灵感感到自豪。 但是此刻,我们感到内,、失望,而且-坦率地说-伤心欲绝。 我们对下注于我们的早期用户的一种责任感加剧了这种感觉,我们从中筹集了65,000美元。 当我们着手为iPhone打造最佳键盘时,我们并没有计划将Next Keyboard变成这样。 我们提供了一个好的产品,但未能兑现我们所有的承诺。 您对我们冒险,对不起,我们让您失望了。 正如我们对自己说的每个人有时会遭受损失一样,这种损失不仅会影响我们。 它会影响所有相信我们并相信该应用程序的人。 我们对此进行了多次反思,并且弄清楚了杀死Next Keyboard的原因: Next Keyboard不是可持续的业务。 我们公司开始在App Store中构建付费应用程序(请参阅唤醒和快速适应),我们认为我们可以利用Next Keyboard复制我们的成功。 不幸的是,付费应用的预付价格已经变得过高,无法正常扩展,特别是与免费应用相比。 换句话说, 付费应用程序(大部分)已失效 。 Next出了什么问题? 尽管一切顺利,但App Store的现实情况是,这并不是一种简单的快速致富方法。 对于我们来说,突破炒作很重要。 媒体提供给您的故事和案例研究不准确。 在应用开发者Pixite之后,The Verge有很大的发展,John Gruber最近写了有关关闭其应用Vesper的文章。 移动设备上的功能键盘很重要,但它们并不能促进可持续的良好业务发展,它们是极其复杂的产品,需要对机器学习和NLP有深入的了解。 考虑以下故事: 微软购买了Swiftkey Minuum已从功能键盘转向表情符号空间 Fleksy被Pinterest收购 大玩家进入了键盘大战。 Google为iOS,Gboard构建了自己的键盘,而Apple的键盘也在不断改进。 当iOS 9发布时,Apple的键盘具有快速输入功能,快捷键栏以及具有多点触摸手势的选择文本。 像Next这样的第三方键盘在功能上受到限制,而Apple则没有。 例如,Apple的键盘是唯一可以记录语音并进行语音转文本的键盘。 iOS 10将继续这一趋势。 而且不要让它感到困惑-我很高兴使用Apple的键盘。 Apple即将开放一个新的iOS 10 […]

最喜欢的WWDC 2018会议

今年,我未能通过WWDC的彩票,也错过了主题演讲直播,因为那天我在奥斯陆峡湾外的克里斯蒂安·拉迪奇(Christian Radich)上航行。 幸运的是,所有视频很快都可以在Apple Developer网站上找到,我们现在可以在Chrome或macOS上的非官方WWDC应用中观看它们。 我推荐WWDC macOS应用程序,因为它可以标记收藏夹和过滤器,还可以将播放速度调整为1.25或1.5,从而节省了一些时间。 今年WWDC将重点放在隐私,稳定性和速度上,这是我所希望的,这要归功于Apple工程师实现了这一目标,而且重新安装所谓的更稳定的iOS 12确实是现实。 作为一名iOS工程师,我喜欢把更多的精力放在我身上,这是关于Swift编程语言,Cocoa Touch中的新变化,Xcode的增强以及测试技巧。 我还想探索有关机器学习的更多信息,因此,我很高兴苹果公司通过引入Turi Create和Create ML对该技术进行了更多投资。 对我来说,API经常被弃用,并且很高兴知道它们,但是最重要的是投资于您的编程,调试和测试技能,您可以将其应用于许多其他平台。 去年收藏夹列表的下一个,下面是我最喜欢的个人笔记。 事物未按特定顺序列出。 希望你觉得它有用。 平台联盟国 如果您没有时间,则应仅观看此会话。 平台国情咨文就像开发人员的主题演讲一样,它突出了重要的变化。 隐私:Apple确认其对隐私和安全的承诺,并在iOS 12上引入了密码管理功能和自动填充功能。生成强密码,与第三密码管理集成并从SMS消息快速填充OTP字段从未如此简单。 GateKeeper也得到了一些改进,并开始要求对应用程序进行公证。 iOS 12:性能大幅提升,Siri通过快捷方式支持,FaceTime中的群组调用和分组通知功能变得更加智能。 表情符号迷也介绍了Memoji。 macOS 10.14 Mojave:带有暗模式的更多内容。 他们主要使用Xcode在黑暗模式下进行演示,这看起来很酷。 今年的WWDC横幅广告提供了有关iOS和macOS跨平台应用程序的提示,这对于Marzipan来说是部分正确的,Marzipan是允许iOS应用程序在Mac上运行的一种方式。 Xcode 10:改进了代码编辑和源代码管理更改条形指示器。 使用内存调试工具进行调试,增强LLDB性能,尤其是用并行任务完全用Swift重写的新构建系统是令人振奋的消息。 Swift 4.2:如果您遵循swift repo,那么Swift 4.2可能并不奇怪。 Swift 5计划也有公告。 机器学习:从未比这更热。 今年,我们看到了在机器学习方面的巨大投资,这些机器学习包括Create ML,Turi Create,Natural Language框架,CoreML 2和Vision中的新检测功能。 ARKit 2,watchOS 5,tvOS 12,AppStore Connect和AppStore Connect API是您不想错过的其他重要新闻。 Swift的新功能 与本次会议一起,我建议您阅读非常简洁的Swift […]