在开发iOS应用程序时,模拟器是开发人员的最好朋友。 这是在开发过程中测试应用程序的快速简便的方法,因为我们可以使用GUI与iOS模拟器进行交互。 苹果公司关于模拟器入门的文档很棒,我们几乎可以通过使用图形用户界面来学习有关控制模拟器的所有知识。 尽管模拟器很容易与GUI一起使用,但是脚本模拟器交互要在Continuous Integration服务器上运行有点痛苦。 幸运的是,Apple有一个不错的命令行实用程序,名为“ simctl”。 在本文中,让我们看看如何使用’simctl’与iOS模拟器进行交互。 我们将介绍以下内容 创建,删除和引导模拟器 将照片和视频添加到模拟器 在模拟器中安装/卸载,启动/终止应用程序 捕获截图并录制模拟器视频 收集模拟器日志和其他技巧 simctl Apple具有“ simctl”二进制文件,可从命令行与iOS模拟器进行交互。 它与Android的adb非常相似。 再次,这是Apple记录不足的另一个实用程序,但是我们可以在/Applications/Xcode.app/Contents/Developer/usr/bin/simctl中找到二进制文件,并将其与xcrun实用程序一起使用。 我们可以使用help命令访问所有可用选项 $ xcrun simctl帮助 我们可以使用’simctl’在iOS模拟器上执行各种操作,包括创建新模拟器,擦除模拟器,在模拟器内部安装应用,向模拟器添加照片/视频等等。 让我们详细研究其中的几个。 列出所有可用的模拟器 我们可以使用命令轻松列出所有可用的模拟器 $ xcrun simctl列表 该命令将列出运行时所有可用的模拟器。 如果已经在运行,它还将显示“已启动”模拟器。 在模拟器上的CRUD操作 我们可以使用simctl创建,擦除,删除,引导,关闭和升级模拟器。 创建 我们可以使用命令在现有的iPhone7(iOS 10.3)模拟器之上轻松创建名为“ My-iPhone7”的新模拟器。 $ xcrun simctl创建My-iphone7 com.apple.CoreSimulator.SimDeviceType.iPhone-7 com.apple.CoreSimulator.SimRuntime.iOS-10-3 我们可以看到使用列表选项新创建的模拟器,并且拥有模拟器’C86A559A-1F50–40D1–8D84–954EDFBBCE18’的UUID 关机/擦除/启动 正如我们已经看到的那样,已经启动了另一个模拟器,让我们关闭它并擦除其内容。 这里的顺序很重要,我们不能在引导状态下擦除模拟器,我们需要先关闭然后再擦除。 $ xcrun simctl关闭C8C050F3–062D-4444-A888-BBEC783E31BD $ xcrun simctl擦除C8C050F3–062D-4444-A888-BBEC783E31BD 开机 现在,让我们使用新的UUID引导新创建的模拟器 […]
现场安装和维修时遇到的所有问题,请访问可可瓶中的可可豆。 在可可粉中安装了可信赖的产品,因此在可可中获得了可信赖的建筑。 Para nuestro demo tenemos que abrir el archivo Podfile que se encuentra en laraízde la carpeta que descargamos。 Este archivo contiene el nombre“ HelloSDL”或laversión“ 4.5.5”在存储库中使用了笛卡尔。 终端,空地上的建筑和设施,“ pod安装”。 出售类似的东西,类似“在Pod安装完成!”。 Xcode y seleccionamos laopciónde Lo siguiente que haremosseráabrir“ Abrir otro proyecto…”。 Despuésabrimos la carpeta donde guardamos el proyecto y abrimos el archivo conextensiónxcworkspace ,在任何地方都可以使用HelloSDL.xcworkspace 。 […]
如果您错过了SNES经典游戏,可以通过编译GitHub上非常方便的多控制台模拟器Provenance的构建,这是在iOS上发挥出色功能的快速方法。 你需要: 苹果机 Xcode iOS 10 免费的Apple开发人员帐户 闪电电缆将设备连接到Mac 脚步: 安装Xcode(如果尚未安装)。 xcode-select-安装 从源头拉 git clone https://github.com/jasarien/Provenance.git 打开Xcode和Build for iOS 打开Provenance.xcworkspace(不是.xcodeproj) 在设置中将捆绑包标识符和团队更改为您自己的名称(捆绑包标识符应类似于com.thisisanexample.Provenance) 从方案菜单中选择“出处放行” 连接您的iOS设备并从可用设备列表中进行选择(iPad与Provenance结合使用非常出色!我已将iPad变成了一个巨大的Game Gear。) 点击运行按钮,拔下电源即可享受! 有关更多详细说明和原始源代码,请在此处转到Proveneance github存储库。
查看Wikipedia上的定义: “模拟是对现实过程或系统操作的模仿。 首先模拟事物的行为需要开发模型。 该模型表示所选物理或抽象系统或过程的关键特征,行为和功能。 该模型表示系统本身,而仿真表示系统随时间的运行情况。” 因此,这里的真实系统是iPhone。 尽管模型的细节非常复杂,但我只想关注基本内容:它是具有主应用程序(iOS)的设备/硬件,子应用程序(我们的应用程序)将在其上运行。 硬体 是带有处理器,RAM,键盘和鼠标的MacBook Pro(希望如此!)(我从未见过支持触摸的iOS Simulator,我的意思是触摸Simulator :)。 当然,您可以在模拟器中使用触摸板。 2.主要应用 甚至您的iOS模拟器看起来也像昂贵的iPhone XS Max,它只是一个普通的Mac OS应用程序,其布局模仿了真实的iPhone。 您甚至可以使用MacOS上的所有公共API来创建布局,但是Apple在MacOS上也有某种私有的UIKit可以做到这一点。 他们很快将在iOSMac项目(https://kirb.me/2018/06/07/iosmac-research.html)中打开它。 iOS模拟器是Mac OS应用程序,具有某些进程,但是其他应用程序如何在其上运行? 让我们继续下一部分! 3.儿童申请 这可能是iOS模拟器中最有趣的部分。 您有一个主机应用程序,其他应用程序将在其上运行。 您可能会猜到,这全都与进程间通信有关。 某些熟悉Windows的人可能会想到“跨多个进程共享HWND”这样的事情,因为一个进程创建了窗口,并将窗口处理程序交给另一个进程使用。 另一个示例是Chrome无窗口插件机制(https://www.chromium.org/developers/design-documents/plugin-architecture),其中Chrome使用一些宿主进程进行渲染,插件进程将从宿主获取绘图上下文绘制所需内容的过程。 构建iOS模拟器时,您的iOS应用程序将是Mac OS应用程序(显然),而iOS模拟器是通过类似于Chrome中无窗口插件的机制处理渲染和用户交互的宿主进程。 来自iOS模拟器(主机进程)的鼠标,键盘事件将被预处理,并传递给我们的应用程序,模拟真实的iOS发送给真实的应用程序的同一件事。 您可能会问,我的iOS应用程序是否像普通的Mac OS应用程序那样构建,为什么不仅仅在单独的窗口中显示它们? 应该没问题,但一点也不酷。 而且它不会像定义中那样模仿我们模型的行为。 这就是模拟器来的原因。 关于iOS模拟器的详细信息,我们还有很多未知的事情,这将需要更多的时间进行研究。 希望我们能够继续学习并与他人分享。 直到下次,保重!
您需要创建应用程序的演示版吗? 没问题! 使用 Bitrise 的新步骤构建.app文件, 并将其上传到模拟器。 我们已经推出了新步骤的Beta版: 用于模拟器的Xcode构建 。 此步骤将在iOS模拟器目标位置运行xcodebuild命令并生成一个.app文件,然后可以在模拟器上运行该文件。 .app文件可以上传到Appetize.io进行演示,测试等。 在Xcode build for simulator运行Xcode build for simulator之后,可以添加Appetize.io deploy 。 在此处阅读有关Appetize集成的更多信息。 该步骤所需的输入 : project_path :项目(或工作区)路径 配置:要使用的配置。 scheme :要使用的方案。 Simulator_device :模拟器名称。 (例如:iPhone 6s Plus) Simulator_os_version :操作系统版本。 (最新的11.4等…) Simulator_platform :iOS模拟器/ tvOS模拟器 步骤输出: BITRISE_APP_DIR_PATH:生成(并复制)的应用程序目录 BITRISE_APP_DIR_PATH_LIST :此输出将包括主要目标应用程序的路径+每个相关目标的应用程序路径。 路径以`|字符分隔,例如: /deploy109787178/sample-apps-ios-workspace-swift.app|/deploy109787178/bitfall.sample-apps-ios-workspace-swift-watch.app | /deploy109787178/sample-apps-ios-workspace-swift.app|/deploy109787178/bitfall.sample-apps-ios-workspace-swift-watch.app BITRISE_XCODE_BUILD_RAW_RESULT_TEXT_PATH:这是原始构建结果日志文件的路径。 如果output_tool=xcpretty并且构建失败,则此日志将包含构建输出。 将iOS构建为模拟器的积极方面:您无需对项目进行代码签名(无需证书/无需配置文件)。 😎 让我们知道它是如何工作的,我们感谢所有反馈。 建设愉快! 最初发布在 Bitrise博客上 […]
询问任何经验丰富的iOS开发人员,他们会告诉您应用签名是散发大多数屁味的部分。 它不会杀死您,您可以度过难关,但是却充满了不便,愤怒和一点神秘感。 因此,Apple一直在努力实现流程自动化,因此对于产品开发人员而言,只需勾选一个复选框即可。 当无法选中该框时,还有其他工具可以帮助减轻痛苦。 因为这只是最糟糕的情况,所以我们懒惰的工程师已经制作了足够的工具,可以容忍完整的应用程序签名。 但是中间的步骤呢? 仅仅因为我们可以从纽约飞往洛杉矶,就不能更轻松地开车前往费城。 模拟器 人们不时喜欢在发送代码之前对其进行测试。 这可能是最佳做法,我不知道,我是工程师,所以提起诉讼。 有些人甚至喜欢自动化他们的测试。 如果您想在iOS上自动化测试,则意味着您将在模拟器中进行测试。 现在,您将如何在要分发到实际设备的构建中执行此操作? 您知道吗,我们早先谈论过的那些花哨的建筑? 这些将不适用于模拟器。 不,现在您需要一个新的过程。 这可能看起来很神秘,但实际上只是在做您之前所做的事情,但是大约停止了四分之一。 实际上,每次您运行针对模拟器设备的应用程序的调试版本时,Xcode都会创建有效的模拟器版本。 运行针对模拟器的构建后,您可以在派生数据文件夹中找到模拟器构建本身。 外观类似于: ~/Library/Developer/Xcode/DerivedData/{App GUID}/Build/Products/Debug-iphonesimulator 。 但这不好。 什么,您将在每次测试时调试您的应用程序,拔出模拟器应用程序进行像非利士汀一样的测试吗? 不,你比那更好。 您应该得到比这更好的东西。 您应该得到自动化的东西。 也许还有一个饼干。 Fastlane自动构建仿真器 我会说TLDR,但为时已晚。 这是使用Fastlane创建模拟器版本的方法。 xcodebuild(workspace:“#{workspace}”, 方案:“#{scheme}”, xcargs:“-configuration#{configuration} -sdk’iphonesimulator11.3′-destination’generic / platform = iOS Simulator’” )zip(路径:“ ./ simulator / Build / Products / Debug-iphonesimulator /#{app-name}”, output_path:“ ./ build /#{build-name} […]
我遵循了“编写您自己的虚拟机”教程来编写VM。 我决定用Swift编写它,因为我已经有一段时间没有写Swift了,并且错过了编写Swift程序的机会。 码 可以在此处查看该项目的完整源代码。 在几年前阅读Nand2Tetris书和课程之前,我只写过一个VM,也曾是一个玩具,因此早就忘记了一些细节,这就是为什么这次练习是一个很好的复习。 您会注意到代码没有经过优化,但是可以正常工作,到目前为止已经足够了。 存储器和寄存器均表示为UInt16数组。 我本可以直接在内存中使用指向UInt16值的指针,这可能会更快,更优雅。 这是我在实施此项目时(重新)学习的一些有趣的事情。 标志延伸 LC-3 VM使用无符号的16位整数。 但是,某些指令(例如下面描述的ST(存储)指令)要求对一个无符号的16位整数与另一个少于16位的整数进行算术运算。 ST操作通过将寄存器SR指定的内容存储在通过将程序计数器偏移量(PCOffset)位0到8加到程序计数器(PC)的当前值而指定的存储位置中来进行。 PC与LC8机器中的所有其他寄存器一样,都是16位值,而PCOffset是9位宽。 为了能够通过两个值的加法运算,必须对PCOffset值进行符号扩展。 如果PCOffset的最高有效位为0,我们只需在PCOffset的左侧填充0,直到其长16位。 如果MSB为1,则PCOffset用1填充。 值的符号扩展基本上增加了二进制数的位数,同时保留了其符号(正/负)。 Swift中的溢出添加 与在C语言中在Swift中添加两个UInt16整数(或任何无符号整数)不同,C语言没有自动溢出处理功能。 例如,以下代码将在Swift中给出EXC_BAD_INSTRUCTION错误: let n: UInt16 = UInt16(UINT16_MAX) print(n + 5) //EXC_BAD_INSTRUCTION 为了选择无符号整数的溢出行为,必须使用溢出加法(或减法或乘法)运算符&+ 。 let n: UInt16 = UInt16(UINT16_MAX) print(n &+ 5) //4 终端模式 终端对stdin的默认行为是对键盘输入进行缓冲和预处理,直到遇到新行\n ,然后才将其传递给正在运行的程序。 此模式称为熟模式或规范模式。 要为VM实现checkKeyBoard()函数,我需要将每个单独的按键传递给我的程序,而无需任何缓冲并等待输入新的换行符。 这要求将终端设置为原始或非规范模式。 我们可以通过使用tcgetattr()读取终端的属性并将其修改为一个结构,然后将该修改后的结构传递到tcsetattr()来设置终端的属性。 到大端 编写此VM可以使您对字节序进行重新整理。 它提醒我,字节序是指整数字的各个字节的顺序(虽然字节序可以指的是单个位,但在实践中极为罕见)。 LC-3 VM程序是大端的。 大多数现代CPU体系结构都使用低位字节序。 […]
您的iOS供应配置文件的设置是否曾经遇到过乏味的问题? 还是您的配置文件已过期,您是否就不能再续订它们?……但是,您迫不及待地想测试一下您最新的出色移动应用程序? 热情的开发人员不要害怕; 我们已经覆盖了您。 Simulator Build来了! 测试是应用程序开发不可或缺的一部分。 尽管可以在浏览器中预览用Cordova制作的应用程序(扩展名为PC ),但是一些限制使开发人员无法彻底测试他们的应用程序(例如Cordova插件 , Apple 应用程序服务,平台怪癖 )。 为了确保您的应用程序确实能够按预期运行,请在测试之前首先构建您的应用程序。 在iOS平台上,甚至需要先安装预配置文件 ,然后才能安装应用。 为此,必须加入Apple Developer Program并进行大量配置。 尽管像往常一样,在某些情况下,开发人员无法访问其配置文件,或者由于某种原因而不想/不能加入Apple开发人员计划。 因此,这一次,我们向Monaca添加了Simulator Build功能。 与过去的所有其他类型的构建不同,不需要设置iOS Build Configuration页面(扩展名:不需要证书和置备配置文件 )。 换句话说,测试您的iOS应用程序比以往任何时候都更加轻松! 在这篇文章中,我们将说明如何: 使用Monaca中的Simulator Build功能 在Mac上测试构建( 使用Xcode的iOS模拟器 ) 在浏览器中测试构建( 使用 在线服务 Appetize.io ) 注意:遗憾的是,无法在iOS设备上安装使用Simulator Build构建的应用程序。 在Cloud IDE中打开Monaca项目后,转到Build → Build App for iOS ,导航到Build iOS App屏幕。 2.在屏幕的右侧,您将发现已添加“模拟器构建”选项。 要开始,只需单击Simulator Build图标,然后Start Build按钮。 3.构建过程完成后,将为您提供“ […]
这是一个简单,非常有用的技巧,每次与模拟器打交道时,可以节省几秒钟。 用⌘-R重置Sim 您已经编写了代码。 您已经在模拟器中构建并运行了。 无数次,无数次。 您已经运行了测试。 现在,您想重置模拟器并尝试一些您所做的变体。 您需要一个干净的开始。 但是必须将鼠标悬停在菜单栏上,记住哪个菜单包含“ Reset Simulator and Settings…”(重置模拟器和设置…)选项,点击它,然后等待,真是太麻烦了。 生活艰难,是吗? 而是按⌘-R来做呢? 这很简单。 快。 易于设置。 就是这样: 打开查找器窗口。 按⌘-shift-g 将此粘贴到: /Applications/Xcode.app/Contents/Developer/Applications/ 按下“确定”按钮。 下拉Finder的Apple菜单。 选择System Preferences 。 选择Keyboard 。 选择Shortcuts选项卡。 在左侧面板中选择“ App Shortcuts ”。 选择右侧面板下方的+ 。 您需要从“ All Applications下拉菜单中选择“ Simulator ”。 如果偶然没有在下拉列表中列出,请选择Other 。 切换到您在步骤2中创建的窗口。 将模拟器拖到“应用程序选择”窗口中。 单击Ok 。 将其粘贴为Menu Title : Reset Content and Settings… […]