Tag: ios

选择第二种语言:Swift To Python

为什么选择Python以及它的样子 Swift是开始工作的好方法。 我从来没有写过一行代码。 作为一个完整的编程初学者,花了13个月的时间进行设计,自学,编码,重新编码,然后启动我的第一个完整应用程序。 我为此感到无比自豪,这是人们每天都在玩的新颖游戏。 除了保持最新状态并推出新功能外,任务还很完整。 现在有这个东西。 一旦我变得根深蒂固地思考代码,就可以用这种技能来完成所有可能的事情。 在这种情况下,仅了解Swift的问题也变得显而易见。 尽管我喜欢Apple生态系统,但通过编写Swift代码,我只能覆盖50%的移动用户和不到4%的桌面用户。 我要编写的下一个软件是台式机软件。 这些是我主要为自己创建的程序,但是还有很多其他人可以从中受益。 如果用Swift编写它们,则只能覆盖4%的用户。 如果我用Python编写它们,几乎可以接触到所有人。 为什么是Python? 我可以达到更大的用户群。 有些工具在Python中可用,而在Swift中可能永远无法使用。 对我来说,那个库是Tensorflow。 有大量的稳定框架可用。 我可以为台式机,网络甚至移动设备编写Python。 不是说我会为手机编写它。 我可能不会,但是选项在那里。 您几乎要问的每个问题都已经在StackOverflow上得到了解答。 SO上的Python标签:〜596k。 SO上的Swift标签:〜100k 这需要多长时间? 比使用第一语言的时间要少得多。 几天之内,您就可以编写出基本的软件。 语法如何比较? 非常相似。 点表示法,函数参数以及您编写的许多代码看起来都一样。 空格是Python使一切保持秩序的方式。 您将不会使用方括号来打开和关闭函数或类。 这意味着,起初,一切都会看起来很杂乱。 最大的挑战是什么? 命令行。 我对命令行并不感到陌生,但是Python需要一定水平。 带有它的学习曲线可能会令人沮丧,但没有什么不同。 您做得越多,就越容易。 Python文档不那么友好,它没有像Xcode这样的强大IDE。 大多数语言都没有。 进行设置并习惯于新的IDE。 PyCharm是我的选择。 我设法从Xcode移植了大多数语法颜色设置和键绑定。 这是一个持续的过程。 如果您过于依赖UI的故事板,那么使用新语言会困难得多。 故事板可能很棒,但我建议在没有代码的情况下进行所有UI操作时,请不要使用所有UI。 编程界就是这样做的。 签出此内容以使用没有情节提要的面板,并查看代码中的布局对齐方式。 与其他IDE相比,Xcode中的自动完成和预测功能令人难以置信。 直到我开始为别人购物时,我才意识到自己有多依赖。 我输入的内容比使用Swift时要多。 我是否已经停下来质疑这是否是一个好的决定? 是。 但是到目前为止,只有一个原因。 […]

Xamarin iOS验证文本字段教程

我最近开始涉足移动开发。 特别是使用Xamarin iOS。 这是一次很棒的经历,我正在一个副项目上取得重大进展,我希望它将在未来几个月内达到足够的体面并向公众发布。 如果您像我一样,那么您不是UI / UX或设计方面的专家-也不想花很多时间假装自己-但当您的应用在原型制作过程中看起来像是一团糟时,您一定会感激不尽并获得功能布局。 为此,重要的是要拥有随时可用的工具,以便在保持整洁外观的同时快速进行原型制作。 在这篇文章中,我将提供有关如何实现这样一种工具的教程。 我想这是向您介绍我的平面和最小验证文本字段的地方: 如果这看起来有用,请继续阅读。 我要直接跳进去! 我想指出的是,在本教程中,我假设您对Visual Studio和Xamarin iOS有一定的了解。 但是,如果您是一个全新的人,而我却很快地浏览了所有内容,我很乐意回答问题! 您可以在 此处 参考完整的源代码 。 让我们从创建一个新的单视图应用程序开始。 项目加载后,打开情节提要并添加新的UITextField并执行以下操作: 给它一个标识名(我使用了NameTextField) 将其尺寸调整为275px x 30px 删除边框样式 删除初始文字 添加占位符文本 可选:添加约束 您应该最终得到类似于以下内容: 您显然不需要使用任何自定义字体,但是在本教程中,我使用了EB Garamond和Oswald。 对初始视图控制器满意后,保存情节提要并退出。 现在获取一些实际代码。 我们要做的第一件事是添加用于着色UIView边框的功能。 我们将通过扩展方法来实现。 将一个新的类文件添加到您的项目,名为UIViewExtensions.cs。 初始代码如下: 在进入验证文本字段之前,让我们进一步进行边框着色功能,并创建一个名为BorderedTextField的新类。 创建一个名为BorderedTextField.cs的新类文件,并按如下方式填充它: 我真的希望你们中的一些人觉得这有用。 如果您有任何疑问或反馈,我希望听到,所以请联系。 否则,谢谢您的阅读! 再一次,您可以在 此处 引用完整的源代码 。

使用CocoaPods和Carthage分发封闭源框架

每个开发人员都会不时地努力工作。 为了实现我们想要的功能,我们从博客,书籍,Github页面(源代码,要点,问题–顺便阅读Github问题可能会非常有帮助)中进行阅读,堆栈溢出线程等。我们从上述所有来源中收集很少的信息并收集它们寻找解决方案。 对于我们大多数人来说,在解决了我们的问题之后,我们就解决了。 但是,如果我们忘记了,或者我们不准备再做一次该怎么办? 写下我们在此过程中遇到的挑战是一个好习惯,但是我们当中有多少人呢? 大多数时候,我们选择we懒的方式。 我会记住它,或者会再次找到相关的东西。 这次,我将改变态度,并写出在与CocoaPods和Carthage一起作为封闭源项目分发我们的框架时遇到的挑战。 我希望这篇文章可以帮助某人节省时间并保持神经😄 让我们从列出我们正在做的事情开始: 我们正在构建一个简单的框架(本例中为付款结帐服务)。 现在,我们自己完成所有工作,这意味着我们的框架没有内部依赖性。 (好吧,如果您嵌套了依赖项,那么本文将不再涉及它们,因此,您将学到更多内容,但是请相信我,它们并不难。) 框架使用Objective-C编写,以支持两种语言。 尽管我们是Swift的粉丝,但出于某些考虑,我们还是选择了Obj-C。 (如果您拥有Swift框架,则可以像本文中一样应用所有内容,因此不用担心👊🏻) 我们希望将代码作为封闭源分发。 因此,我们将分发通用二进制文件(.framework文件)。 通用意味着该宝贝将在物理设备和模拟器的所有体系结构上工作。 我们正在使用Github作为我们框架的宿主。 我听说在进行聊天之前已经足够了,在我们开始之前,我假设您都已经在Mac上安装了CocoaPods和Carthage并熟悉它们和一些终端命令(实际上,我确定,因为您要分发您的框架以及一些依赖项管理器😄)。 迦太基 https://github.com/Carthage/Carthage/pull/1760,直到出现该拉取请求,您才能将框架发布为封闭源。 它相对较新,因为它已于今年2月14日❤️推送回购。 (编码code真是糟糕的一天) 迦太基手册将这一过程命名为将预先构建的框架归档到一个zip文件中 ,该文件缺少有关如何读取日志的信息,等等。我们现在将进行遍历。 如果Carthage附加到项目存储库上的GitHub Release或通过二进制项目定义文件,它们可以自动使用预构建的框架,而不是从头开始构建。 要为特定标签提供预构建的框架,应将所有受支持平台的二进制文件一起压缩到一个存档中,并且该存档应附加到与该标签相对应的已发布发行版中。 附件名称中应包含.framework (例如ReactiveCocoa.framework.zip ),以向Carthage指示其包含二进制文件。 您可以使用carthage archive命令执行上述归档操作,如下所示: 迦太基建造-无漏电流 迦太基档案YourFrameworkName 开始之前,请在Xcode上打开框架项目,然后通过Command + Option + Shift + K干净地构建项目。 (清洁文件夹会在大多数情况下将您从恶魔中拯救出来) 打开一个终端并导航到您的项目文件夹。 carthage build –no-skip-current到终端。 (首先,我将显示失败的构建和处理方法。然后,我们将继续)

使用iOS应用程序抓取Firebase服务

那是晴天的时候之一,那时我回到家,终于有时间从我的购物清单中计划好美食应用程序。 不管是好是坏,我不仅需要进行应用程序设计,而且: 身份验证。 我可以在其中保存和检索内容(数据,信息,图像)的数据库。 可搜索的食品API。 大概,我需要一个认真的人加入我自己的小团队。 或者,我可以一个人做吗? 或多或少😃。 简短答案-是的! 因为我一方面找到了价格合理的可搜索食物API,另一方面又找到了Firebase 。 长答案? 继续阅读! Firebase是面向移动开发人员的统一平台(是的,适用于Android和iOS),提供了许多很棒的功能,其中包括实时数据库,崩溃报告,分析,身份验证等。最好在以下位置查看整个列表:他们的官方网站。 我写的最后一篇文章包括一个项目 名为Unicorner,旨在接收带有Unicorner用户看到并拍照的独角兽图像的远程通知。 这次,该项目将要拍摄独角兽的图片并将其上传到数据库。 然后,来自数据库的数据将被馈送到一个列表,在该列表中可以看到上传的图片和信息。 通知不会发送,但我们可以在另一篇文章中进行处理,对吗? 无论如何,这是计划的文章工作流程: Firebase帐户注册和iOS应用程序配置。 在Xcode中设置Demo项目。 编写一些代码以与Firebase实时数据库和存储进行通信。 实际上,这很简单。 首先转到此链接,然后单击屏幕右上方的“ 登录”按钮。 可以使用gmail帐户( 大多数人都拥有一个 )登录,也可以按照注册步骤创建新帐户来登录。 完成后,再次点击右上方的转到控制台 , 进入 Firebase控制台。 这是可见的: 我的Firebase控制台中已经有一个正在处理的应用程序项目。 要添加另一个,只需点击添加项目,然后看到此模式: 我为我的项目选择的名称是UnicornUploader和 我选择的地区是美国。 根据需要选择,然后单击创建项目 。 在创建项目时稍等一下,瞧: 点击“ 继续”后 ,您将进入“ 项目概述”页面: 在这里可以访问Firebase提供的所有功能。 确实,在本文中,我将仅关注三个方面-身份验证,数据库和存储。 您确保在时间允许的情况下将它们全部检查出来。 将Firebase添加到iOS应用 是时候选择将Firebase添加到您的iOS 应用程序中,以将Firebase添加到我的iOS应用程序中 : 我已经输入了演示项目的iOS Bundle ID,对您的演示文稿也做了同样的操作,然后点击Register […]

第3部分:安装自定义日志管理器

欢迎使用第3部分:安装自定义日志管理器 如果需要检查第2部分,请继续 。 首先,什么是SwiftyBeaver? SwiftyBeaver是基于Swift的iOS和macOS日志记录框架。 SwiftyBeaver具有不同类型的日志消息,我们还可以过滤日志以使错误检查更加轻松。 它有一个免费的许可计划。 那不是全部。 出站日志信息保存在云中。 SwiftyBeaver带有一个macOS应用程序,可让我们实时查看日志。 SwiftyBeaver日志记录框架可以使用您选择的安装工具安装在每台Apple设备以及Swift 2和Swift 3上 。 对于Swift 3,请安装最新的SwiftyBeaver版本 对于Swift 2,安装SwiftyBeaver 0.7 在第3部分中,我们将为项目配置SwiftyBeaver。 云设置 完成注册SwiftyBeaver首选项菜单后,您将需要生成新的凭据。 File> New SwiftyBeaver保存本地日志文件。 但是我没有必要的信息。 保存的位置并不重要,但是请不要忘记此位置。 单击“ 生成新的应用程序凭据”按钮时,您应该看到我们应用程序的应用程序ID , 应用程序秘密和加密密钥 。 让我们使用AppDelegate定义这些信息。 安装SwiftyBeaver Logging Framework之后,只需在AppDelegate.swift的顶部添加以下3行: 导入SwiftyBeaver 让日志= SwiftyBeaver.self AppDelegate:didFinishLaunchingWithOptions()添加您要在整个应用程序中使用的SwiftyBeaver日志目标(控制台,文件等): //添加日志目标。 至少需要一个! let console = ConsoleDestination()//登录到Xcode控制台 let file = FileDestination()//登录到默认的swiftybeaver.log文件 log.addDestination(控制台) log.addDestination(文件) 要开始记录到平台,您只需要使用您的凭据启动SBPlatformDestination() ,可以选择调整属性,然后将该实例添加到SwiftyBeaver本身。 让平台= […]

为什么我写家庭框架

在Apple平台上构建应用程序时,开箱即用的是模型视图控制器模式。 尽管多年来引起了很多争议,但这种体系结构本身并没有什么坏处。 主要的抱怨是可怕的“ Massive View Controller”,这些年来,它还获得了许多其他同义词,例如哥斯拉控制器,View ConTROLLer,我可以继续说下去。 我分享了很长时间的观点,在其他几个模式中寻找一个穿着闪亮盔甲的骑士。 但是,他们全都走同一条路。 与系统作斗争,直到我迷路了,发现自己回到了Apple为您提供的服务。 看起来一切希望都已荡然无存,Dave DeLong发表了自己的四部分文章系列“更好的MVC”。 更好的MVC,第1部分:问题 “修复”模型视图控制器系列文章的第1部分:修复封装问题修复大规模视图控制器… davedelong.com 使灯泡发光的是第3部分。 我是一个常见的误解的受害者,因为误解是视图控制器需要负责整个屏幕。 一旦我学会了这种“反模式”,生活就变得像一千个太阳的火焰一样明亮。 我开始以不同的方式考虑控制器,并且我接受了子视图控制器。 作为iOS开发人员的生活开始重新变得有意义。 在继续之前,我只想弄清楚本文的目的。 这与流量控制器模式无关。 使用该模式仅暴露了我认为需要修复的情况。 我不认为流量控制器模式是最终的答案。 这是构建模块化,可扩展且可测试的控制器的一种好方法,甚至是一种很好的模式,对于我和我的同事来说,这都是很好的选择。 如果您想更多地了解该模式,则不是本文。 我建议您阅读戴夫的文章。 他解释得比以往任何时候都好。 继续前进,在使用了子视图控制器一段时间之后,我开始看到我的时间花在了哪里,主要是在必须快速适应变化的时候。 更精确地说,构建流量控制器比将多个控制器粘合在一起要麻烦得多。 我想使用Apple提供的所有可用的UI元素来构成我的用户界面,但是当任何需要出队的问题出现时,我很快就感到失望。 必须有更好的方法。 一种不涉及链式约束并且适应变化的方法。 就像过去的爆炸一样,我想到了Spots框架的核心实现,即SpotsScrollView 。 在该类中,我们使用了基于OLEContainerScrollView的Ole Begemanns实现的布局算法。 该算法开放用于在滚动视图内部使用滚动视图,从而为用户创建一致的滚动体验。 我以Spots算法为基础,重新审视了代码,并逐渐对其进行了改进,直到它可以与您喜欢的任何UI元素按预期方式工作,而无需配置单个约束。 在为框架破解公共API时,我希望它尽可能精简。 我的目标是成为一个嵌入式解决方案,使设置子视图控制器变得像馅饼一样容易。 “公共API简洁明了,应该节省很多您想花在其他地方的时间……” 我想出了三种方法,一种用于添加常规子视图控制器,该子视图控制器处理内部调用所有适当的子视图控制器相关方法。 对于需要将控制器(或更确切地说,其视图)限制为特定高度的情况,我又添加了一个。 最后但并非最不重要的一点是,我添加了一个带有闭包的方法来选择与标准UIViewController的视图不同的视图。 这些是当今存在的公共API方法,以与添加视图时相同的线性垂直顺序排列视图,而子视图控制器由框架内部掩盖和处理。 如果视图在任何时间点都应更改,则算法将相应地对视图进行布局。 另外,我实现了对动画的支持,如果通过使用动画将视图的高度设置为零来删除视图,则框架将确定动画的持续时间,并在布置视图的新位置时采用动画。 这样,它尊重用户的意愿,而无需他们做任何额外的工作。 那么关于出队的事情呢,因为该实现植根于Spots框架,该算法已经考虑到了这一点,这意味着您可以自由地混合和匹配集合视图,表视图,堆栈视图,分段控件和常规UIView ‘ s。 Family框架仍处于起步阶段,但是我看到它的前途光明,因为它的责任很轻,公共API简洁明了,应该可以节省很多您想花在其他地方的时间,最好是与人类家庭在一起。 因此,事不宜迟,我给你一个家庭友好的儿童视图控制器框架:家庭。 希望您能像我一样喜欢它! […]

应用程序开发的入门故事

“嘿! 您是否想知道以经验有限的人的身份制作应用程序是什么感觉? 好吧,这个问题很夸张,因为您单击的文章非常抽象。” 为了给本文提供背景信息,我和我的搭档正在为软件产品开发课程制作一个应用程序,目的是学习协作的最佳实践。 我的合伙人在后端工作时,我负责应用程序的移动/客户端。 我们俩都是编程/软件开发的新手,时间表也大相径庭。 规划过程 尽管不仅开发软件而且进行协作工作对我来说都是新的,但我知道计划和研究必要的材料,适当地确定项目范围并为基于开发过程的清晰路线图至关重要。在我们的技能水平上。 遵循这些粗略的准则,我和我的合伙人可以平等地委派任务,以提高开发过程中的个人效率。 在第一周,我们计划在整个学期中定期召开每周会议,并决定在项目的计划过程中花费两个星期。 我们决定花两个星期的时间来计划自己,以便有足够的时间在其他课程上取得领先。 我们在计划过程中能够完成的工作: 为我们域内的应用程序集思广益。 确定了MVP(最小可行产品)及其之后的版本/扩展目标。 在Trello板上列出必要的任务和准则。 确定对应用程序的必要研究。 将任务适当地委派给每个人。 制定线框和项目时间表。 头脑风暴时的白板(上图)。 在我们的集思广益会议期间,我们决定做出一些能够解决旅游/探索问题的事情。 更具体地说,我们想开发一款能够激励和激励人们去探索自己的地区并在旅行过程中轻松地导航新的陌生地区的应用程序。 我们的解决方案 我们的解决方案是创建一个可用作个人导游的应用程序,奖励用户步行即可到达景点。 我们的主要目标是对探索进行游戏化,以鼓励人们更多地走出去,并帮助不喜欢旅行的旅行者。 在讨论这些目标时,我的一位同学同意这一观点,说: “制定行程会浪费一半的乐趣。” 我们决定采用此想法的另一个原因是,我们希望在可能会很有趣的同时又提供足够的空间使其复杂并具有更多功能,从而使之有趣。 详细的应用程序 该应用程序将使用自定义api向用户显示要探索的各种位置,这些位置均在用户位置的步行距离内。 一旦用户选择了感兴趣的位置,该应用程序便会将用户重定向到Apple地图。 我们的主要激励机制是与用户互动的吉祥物/伴侣,并向用户奖励各种化妆品,以指示他们探索了多少地方。 这个应用程序的主要目的是游戏化探索,以鼓励任何人走出家门,并在自己的家乡或旅行时探索他们所在的地区。 我们对该应用程序的灵感来自一位同学向我们提出的类似想法。 他们正在制作一个应用程序,该应用程序将允许用户沿用当地人创建的路线,以探索和发现不同的区域(类似于地理缓存)。 另一个灵感来源是《神奇宝贝GO!》,这是因为它们使用了游戏化的现实世界探索以及其中包括的他妈哥池方面。 经过广泛的计划,下一步就是开始开发。 冲刺计划和回顾: 在开始编写第一行代码之前,我们需要计划冲刺。 “冲刺计划”是在短期会议上进行的,小组在此期间确定在特定时间段内要完成的任务,确定特定任务的优先级并设定小组目标。 在小组中,我们将冲刺设置为两个星期,并为我们每个人委派了一些任务,从而使我们有足够的灵活性来完成其他课程的工作。 冲刺结束后,我们还计划召开回顾性会议,以回顾迄今为止的进展和工作质量。 我们在这次会议上提出的问题包括:1)进展顺利吗? 2)什么进展不顺利? 3)我们是否需要重新安排积压的优先级? 和4)在下一个Sprint中我们可以做哪些小的改进? 在这段时间里,由于社区事件和/或无法控制或意外的情况,我们通常转移并重新安排任务的优先级。 糟糕,存在一些问题: 即使经过了广泛的计划,也可能总是存在一些无法控制的因素,使工作陷入僵局。 我们在执行此项目时遇到的一些问题是: 疾病 无法互相追究责任 拖延 无法有效地概念化 缺乏沟通 由于这些问题大多数与组织和团队合作有关,因此在感恩节期间,我们召开了一次长期回顾会议,在会议上我们分析了自己的优缺点,并制定了一项计划来帮助我们克服挑战。 […]

iOS App中的TestFlight:Beta测试

Beta测试是软件产品发布周期中的一个步骤。 我们所有人都使用内置模拟器和我们自己的设备测试了您的应用。 有趣的是,即使您是应用程序的创建者,也可能无法发现其中的一些错误。 通过Beta测试,您会惊讶于此阶段发现的缺陷数量。 通过TestFlight,可以轻松邀请用户测试您的应用并收集有价值的反馈,然后再在App Store上发布它们。 仅使用他们的电子邮件地址,您最多可以邀请10,000名测试人员。 要利用TestFlight,只需上传您的应用程序的Beta版,然后使用iTunes Connect添加您想要测试应用程序的人员的姓名和电子邮件地址。 测试人员将安装适用于iOS,watchOS和tvOS的TestFlight应用程序,以便他们可以使用您的Beta应用程序并快速提供反馈。 Beta测试通常向特定数量的用户开放。 他们可能是您潜在的应用程序用户,您的博客关注者,您的同事,朋友甚至家庭成员。 Beta测试的全部目的是让一小部分真实的人接触到您的应用程序,对其进行测试并提供反馈。 您希望您的Beta测试人员在此阶段发现尽可能多的错误,以便可以在向公众推出您的应用程序之前对其进行修复。 内部测试员: 每个应用程序最多可以由团队中的25位成员进行测试,这些成员在iTunes Connect中被分配了管理员,应用程序管理员,开发人员或市场人员角色。 每个成员最多可以在30个设备上进行测试。 内部测试人员可以访问您所有可用于测试的Beta版本。 外部测试人员和小组: 准备就绪后,您可以邀请多达10,000个不需要成为团队成员的外部测试人员对您打算在App Store上公开发布的应用进行Beta测试。 您可以将外部测试人员组织到自定义组中,并根据您要测试的功能与每个组共享不同的内部版本。 “一次可以在内部或外部对多达100个应用进行测试,并且在上传后,构建会在90天内保持活动状态。 TestFlight同时支持多种版本的iOS应用程序,watchOS应用程序,tvOS应用程序和iMessage应用程序。” 将您的应用上传到iTunes Connect 步骤1: 首先转到“ 构建设置”的“代码签名身份”部分 。 在发行版部分,将标识值更改为iOS Distribution 。 步骤2:转到“ 产品”菜单并存档您的项目。 步骤3:成功归档项目后,单击闪亮的蓝色按钮( Upload to App Store .. )。 步骤4: 对于App Store的发行选项,请检查Strip Swift符号并上载您应用的符号选项。 步骤5:选择您的iOS发行证书和App Store配置文件。 第6步:最后,查看.ipa内容 (库/摘要/标识符),最后触摸一下将.ipa文件上传到iTunes connect。 步骤7:最后,.ipa文件成功上传到iTunes connect 。 […]

将图像制作成圆形或圆形的iOS

此示例显示如何制作一个用如下半径四舍五入的UIView或UIImageView: 目标C someImageView.layer.cornerRadius = CGRectGetHeight(someImageView.frame)/ 2; someImageView.clipsToBounds = YES; 迅速 someImageView.layer.cornerRadius = someImageView.frame.height / 2 someImageView.layer.shouldRasterize = true someImageView.clipsToBounds = true 建议如果使用自动布局,则将someImageView.layer.cornerRadius代码放入viewDidLayoutSubviews中。 如果图像更改大小,这将允许更新图像的cornerRadius。 覆盖func viewDidLayoutSubviews(){ super.viewDidLayoutSubviews() someImageView.layer.cornerRadius = someImageView.frame.size.width / 2 someImageView.layer.masksToBounds = true }

Xcode 8.2 Simulator中的新功能

在Xcode 8.2的发行说明中,Apple为其新版本的Xcode引入了功能。 在此博客中,我将解释如何使用这些新功能。 这是Xcode 8.2 Simulator的两个新功能: 您可以使用xcrun Xcode命令行实用工具xcrun Simulator的视频和屏幕截图。 📷要截屏,请运行命令xcrun simctl io booted screenshot 。 📹要拍摄视频,请运行命令xcrun simctl io booted recordVideo . (9887264) 将应用程序拖到“模拟器”窗口中即可安装该应用程序。 (23387069) 捕获 第一个功能是录制视频并拍摄屏幕截图,非常简单。 您可以启动模拟器,在其上运行您的应用,然后可以截屏或开始/停止视频。 此功能非常方便从您的应用程序发送演示视频。 尽管该命令很长,但是却很容易执行! 拖放 第二个功能是将应用程序拖动到“模拟器”窗口中,但并不是那么简单。 至少不适合我😉 我的想法是,当我拥有.ipa格式的应用程序时,只需将其拖到将安装该应用程序的Simulator窗口中即可。 太糟糕了,事实并非如此。 但是苹果的意思是什么? “ 将应用程序拖到模拟器上” ? 因此,我在大型互联网上进行了搜索,并在Twitter上做了一些研究,在那里我收到了Brandon的这条推文。 提出的问题是; 为什么.app在模拟器中可以工作而.ipa不能工作? 这是因为.ipa格式的iOS应用是针对不同于模拟器可在其上运行的架构(ARM)构建的(x86)。 因此,.ipa格式的iOS应用只能安装在物理设备上,而不能在模拟器上运行! 附加:从DerivedData获取应用程序包 现在我们知道了如何将应用程序捆绑包拖放到Simulator上,我也想提供有关该应用程序捆绑包的一些详细信息。 该应用程序包位于DerivedData文件夹中,并在为设备构建项目时进行编译。 此DerivedData文件夹包含所有中间构建信息,调试和发布构建目标以及项目的索引。 模拟器应用程序捆绑包的特定位置可以在这里找到: 〜/库/开发人员/ Xcode / DerivedData / / Build […]