Tag: xcode

Como Programar en Swift con iOS 12(第3部分)

Bienvenidos a la tercera parte de esta serie de tutorials。 《从前的事实》到《从无到有的事实》 。 从本质上讲,它是一种可组合的,可转换的组件,还可以在ViewController和Podigo中进行修改。 可以从任何人那里得到的东西,可以使您在任何时候都可以使用的东西,可以在任何时候都可以使用。 您可以使用Vamos Hacer或Funcionen! Vamos a mostrar una alerta cuando elbotón“ Calcular” haya sido pulsado。 没有人打扰到我。 Para eso vamos a escribir algo decódigoSwift😎💪 -> 工程浏览器 ,单击ViewController.swift El Interface Builder为 WTF color着色。 Esto es elcódigoSwift de tu应用程序: 的功能,没有接收到Agrega la siguientelíneadecódigodebajo de laúltimallave的信息,didReceiveMemoryWarning didReceiveMemoryWarning() @IBAction […]

React Native和OneSignal第1部分(iOS)

对于React Native,使用One Signal api进行远程通知非常轻松且舒适。 有非常简单的安装和配置步骤。 让我们开始; 创建一个React Native项目 $ react-native init项目 安装一个信号包并链接到项目 $ npm install-保存react-native-onesignal $ react-native链接react-native-onesignal 如果您没有,请注册一个信号帐户。 在XCode中打开您的项目,然后转到“ 功能”标签,然后将“ 推送通知 ”设置为“开” 再次在“ 功能”选项卡中,找到“ 后台模式”并将其设置为“开”,然后选中“ 远程通知” iOS推送证书 访问此页面并使用“自动配置工具”轻松创建证书。 下载.p12文件。 从OneSignal的“所有应用程序”页面中选择您的应用程序,然后转到“应用程序设置”,然后按Apple iOS设置右侧的配置。 上载之前导出的.p12文件 从’react’导入React,{组件}; 从’react-native-onesignal’导入OneSignal; //从节点模块导入包导出默认类App扩展了组件{constructor(properties){ 超级(属性); OneSignal.init(“ YOUR_ONESIGNAL_APPID”); OneSignal.addEventListener(’received’,this.onReceived); OneSignal.addEventListener(’opened’,this.onOpened); OneSignal.addEventListener(’ids’,this.onIds); } componentWillUnmount(){ OneSignal.removeEventListener(’received’,this.onReceived); OneSignal.removeEventListener(’opened’,this.onOpened); OneSignal.removeEventListener(’ids’,this.onIds); } onReceived(通知){ console.log(“收到通知:”,通知); } onOpened(openResult){ console.log(’Message:’,openResult.notification.payload.body); console.log(’Data:’,openResult.notification.payload.additionalData); console.log(’isActive:’,openResult.notification.isAppInFocus); console.log(’openResult:’,openResult); […]

使用macOS Mojave提升生产力—仅针对Xcode启用暗模式

在2018年WWDC活动中,Apple推出了macOS Mojave,它是macOS High Sierra的后继产品,为Mac带来了最受期待的功能之一。 对于Mac和iOS开发人员来说,这也是一个好消息,原因之一是:macOS的主要IDE和开发工具Xcode多年来一直缺少这种功能。 开发人员社区深信,使用深色IDE或文本编辑器实际上可以提高您的工作效率。 考虑到许多现有的代码编辑器都支持暗模式,例如Visual Studio,JetBrains产品系列以及许多其他模式,这似乎是事实。 问题在于,直到macOS Mojave发行时,Xcode才提供此功能,当发行时,它引起了两个不同的问题。 Mail.app,Calendar.app甚至Finder之类的应用对于许多人来说似乎都不正确 。 作为开发人员,我们习惯于在Light模式下使用这些应用程序,但是我们非常喜欢Dark Xcode,以至于我们难以选择:在系统范围内启用Dark Mode或将其保留为当前状态,从而失去了美妙的Dark同时使用Xcode主题。

编译速度提高60%:强制Xcode在Bitrise上使用缓存!

让我们迈出新一步,使Xcode的构建速度提高60%! 🏎 Xcode在派生数据文件夹(〜/ Library / Developer / Xcode / DerivedData)中存储和使用所有与构建相关的缓存文件和杂项数据,除非您运行导出命令。 但是缓存此路径并不是我们唯一要做的事情,因为Xcode缓存取决于项目结构及其所有属性,例如文件修改时间,内容等。 当您在Bitrise上克隆存储库以进行构建时,所有文件的修改时间都将设置为当前时间(git clone的时间),因此,即使大多数文件都已被修改 ,所有新构建的所有文件都将被视为已更改 。内容在构建之间完全没有变化。 为了避免更改文件修改时间,我们创建了一个名为“ 递归缓存缓存” 的新步骤 。 它有2个输入: 目录的路径(默认情况下:“ $ BITRISE_SOURCE_DIR”) 时间(默认为:“ 2017–09–01T15:00:00 + 00:00”)输入字段 此步骤将在给定目录下设置所有文件修改时间,因此在您随后开始的构建中,文件的修改时间将相同。 如果要使用适当的Xcode缓存,则必须设置两个步骤: 递归缓存缓存步骤-保留两次构建之间的项目文件修改时间。 这应该在您的Xcode单元测试步骤之前进行 Cache:Pull,Cache:Push —缓存派生的数据路径(将以下路径同时放入Cache:Push步骤的缓存路径,并忽略路径输入:〜/ Library / Developer / Xcode / DerivedData)。 您如何确认缓存是否按预期工作? 缓存之前,日志如下所示: 如果缓存正在工作,它将是这样的: === BUILD TARGET ios-simple-objc OF PROJECT ios-simple-objc WITH CONFIGURATION Debug === Check […]

使用XCUITests更改设置

Xcode 9增加了编写测试的能力,而现在它可以与“设置”应用程序进行交互。 如果每个人都想禁用位置或将动态字体切换为大字体? -现在有可能。 首先,我们需要像普通应用程序一样午餐设置应用程序,并提供它的捆绑包标识符。 让settingsApp = XCUIApplication(bundleIdentifier:“ com.apple.Preferences”) settingsApp.launch() 您可以与设置进行交互,就像使用应用程序一样。 由于“ [MC] 从私人有效用户设置中读取”错误,目前无法使用交互记录。 我已经提出雷达来增加这种可能性。 假设我们要打开和关闭定位服务。 我们可以这样做: settingsApp.tables.cells.staticTexts [“ Privacy”]。tap() settingsApp.tables.cells.staticTexts [“位置服务”] .tap() 如果settingsApp.switches [“位置服务”] .isSelected { settingsApp.switches [“位置服务”] .tap() settingsApp.buttons [“关闭”] .tap() }其他{ settingsApp.switches [“位置服务”] .tap() } 最好在teardDown上终止设置,这样我们将在每次测试运行时进入主设置屏幕。 settingsApp.terminate() 这是测试的实际效果: 您可以在github上找到要使用的示例项目:https://github.com/PycKamil/XCUITestSettingsExample

解决React Native,macOS Sierra,Xcode 8和Fastlane升级问题

苹果启动了她的最新操作系统。 Xcode已更新为8.0版,第二天所有开发人员都在其开发计算机上修复其工具问题。 听起来很家庭吧? 这篇小型博客文章描述了解决此问题的方法,因为您可能陷入了React Native应用程序的困境,并在整个互联网上搜索如何解决它:)。 修复React Native的_refreshControl编译错误 首先是将_refreshControl的引用固定为RCTScrollView.m (位于node_modules中的文件)中的refreshControl : Xcode 8中的基本SDK 9.3 通过从Apple Developers下载页面下载Xcode 7(需要使用Apple ID登录),可以放回9.3版本的iOS SDK(随Xcode 7一起提供)。 现在,将Xcode应用程序解压缩到某个位置,但不要覆盖现有的Xcode(/ Applications / Xcode)安装! 将正确的平台SDK(右键单击,显示软件包的内容)复制到磁盘上的安全位置,例如:/ Users / /Developer/sdks/9.3/iPhoneOS.platform 。 最后,在当前Xcode应用程序中对此目录进行符号链接: sudo ln -s /用户/ /Developer/sdks/9.3/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9 3.sdk 选择9.3作为基本SDK 打开(如果已经打开Xcode,则需要重新启动)Xcode,转到项目的Build Settings,然后选择9.3。 使用Fastlane修复Xcode 8签名 最后,我们想修复我们的构建过程,使用Fastlane进行设置。 随着Xcode 8的发布,签名已更改,您必须手动设置“配置文件”(请勿打开“ 自动管理唱歌 ”)。 例如,您具有以下体育馆配置: 运行车道时,您可能会看到退出状态:65错误。 这是由Xcode 8设置中的无效签名引起的。 还要确保在项目文件中将所有PROVISIONING_PROFILE变量重命名为PROVISIONING_PROFILE_SPECIFIER 。 现在,在构建目标的“ 常规 ”选项卡中选择正确的“配置文件”: […]

如何在iOS应用程序中为多个模拟器运行UITest?

本文假定您已经知道如何在Xcode中编写UITest。 现在,如何运行与彼此交互的UITest,在这种情况下,您可以为一种消息传递功能编写测试用例,该功能可以在多个模拟器中运行多个用户,并等待他们彼此聊天。 这是消息传递应用程序的理想自动UITest,对吗? 我知道,关于此的StackOverFlow问题不多。 我知道,RayWenderlich网站上也没有教程。 我知道,您可能尝试过不同的解决方案,但是其中任何一个都有一些局限性。 但是,在这里您可以找到适合我的解决方案! 为什么呢 好吧,如果您的应用程序中具有消息传递功能,则应用程序最重要的测试范围是消息传递的整个功能,不仅要确保已发送消息,还要确保将收到消息,或者如果您有群组消息,请确保群组中的所有成员都会收到消息。 您可能会想到可能的解决方案,以下是每种解决方案的缺点: 手动测试 您知道这不是一个好选择! 因为这很耗时,所以即使您的测试场景文档齐全,您也可能会有人为错误,但是测试人员可能会错过对所有案例进行测试的机会! 在一个模拟器/设备中运行两个应用程序: 首先 ,如果您要测试多个用户,则必须为要运行的每个主应用程序定义多个捆绑标识符,并且有一个测试应用程序将与其他应用程序交互。 但可以肯定的是,这不是一个漂亮的测试环境! 其次 ,在应用程序之间进行切换将非常耗时! 第三,但最重要的是,如果您不仅仅想要像行为测试这样的UITest,或者您正在使用像KIF这样的库,它们仅与UnitTest Target兼容,那么在任何这些情况下,您都必须在UnitTest Target中使用测试用例可以访问您的应用程序模块,并获得诸如KIF之类的库的支持! 但是,您将失去运行可与主应用程序交互的单独测试应用程序的功能! 甚至,您将无法在setup()函数中运行以下命令,您将获得运行时错误! XCUIApplication()。launch() 同时运行两个模拟器: 是的,这也是我认为的最佳解决方案。 但请记住,我们不仅需要UITest,而且还使用KIF编写UITest案例!

将酱汁添加到Xcode UI测试:XCUITest +酱汁实验室

XCBlog上的原始帖子在这里 Sauce Labs刚刚宣布支持在其自己的设备场中运行XCUITests。 他们已经在官方博客上宣布了支持。 随着苹果自己的Xcode UI测试框架变得越来越流行,云测试服务不能像Sauce Labs,BrowserStack,Perfecto这样的供应商不能忽视这一事实。 在上一篇文章中,我们看到了XCUITests的各种基于云的设备测试选项。 长期以来,Sauce Labs通过支持和维护Appium一直在帮助社区。 由于本机移动测试自动化框架(例如XCUITest和Expresso)开始流行,因此它们也必须转换齿轮并提供支持。 苹果于2015年推出了Xcode UI测试框架,最后,Sauce Labs支持在其真实设备云上执行这些UI测试。 Sauce Labs已在XCUITest和Real Device Cloud上广播了网络研讨会,以演示我们如何在云设备上设置XCUITest。 不幸的是,我无法参加实时网络研讨会,向主持人提问,但后来我观看了整个视频。 在这篇文章中,我将分享我对此过程的想法,以及可能会给Sauce Labs回答的一些问题。 流程 观看了XCUITest和Real Device Cloud上的整个网络研讨会之后,我了解了在Real Device Cloud上运行XCUITest的过程。 您可以在Sauce Labs Youtube频道上观看在线研讨会,也可以在下面观看。 我将留给您观看网络研讨会,现场演示并了解在Sauce Labs真实设备云上执行XCUITests的过程。 总而言之,该过程涉及以下步骤 使用Swift或Objective-C为iOS应用编写XCUITests 准备两个.ipa文件,一个用于您的主应用程序,另一个用于XCUITest运行器应用程序 使用Sauce Labs Web界面上传这些文件,以便Sauce Labs可以查看那些应用程序 使用设备标识符从Web界面中选择要在其上运行测试的设备 下载XCUITest Runner JAVA应用程序Runner.jar,该应用程序通过传递您的凭据来运行测试。 Java应用程序会将您的凭据,到IPA文件,设备,数据中心的路径作为参数,并触发对指定设备的测试。 然后,您可以查看测试结果,运行设备云的测试屏幕截图和视频。 您可以在上面显示的网络研讨会中看到所有这些工作,因此值得一试。 好处 在实际设备上运行XCUITest肯定有一些明显的好处。 由于iOS模拟器不涉及任何硬件接口。 一些好处是 来自真实设备的反馈非常有价值,因为这些是真实用户使用的设备。 可以选择最常用的设备并对它们并行运行测试 无需购买即可在一周内访问新推出的设备。 我们可以从具有hasipa资产的任何Linux或macOS Continuous […]

如何保持您的iOS本地化文件整洁-Swift脚本版本

与bash脚本类似,我们首先通过create()从根目录中递归搜索本地化的字符串文件。 Apple的FileManager通过枚举对象使文件搜索变得容易。 注意,由于我们通常将打包在本地化文件中的Pod本地化文件打包,因此我们将忽略它们。在parse(_ path: String)方法中的本地化文件并存储时,我们将在此处搜索键重复来优化脚本。 Set的键。 该方法将为所有重复的密钥以及找到的文件路径打印error 。 ( 注意:任何 print(“error:”) 或 print(“warning:”) 格式都会通知Xcode在工具栏上显示相应的消息以及其他构建失败和警告 ) 接下来,我们将验证validateMatchKeys方法中所有可本地化的字符串文件中的键是否匹配。 我们将使用symmetricDifference编织出任何与基本文件都不匹配的额外键。 如果任何可本地化的文件不包含相同的键,则此方法将引发错误并中止脚本。 这使您有机会在下一次执行cleanWrite()之前清理可本地化的文件,它会使用已排序的键并删除多余的空格和换行符来重写可本地化的文件。 下一步是搜索代码库,存储这些文件中使用的密钥,并根据我们的基本密钥进行验证。 有了一点正则表达式,我们就可以成功找到密钥并将它们和文件的路径存储在LocalizationCodeFile结构中,同时还可以通过紧凑地映射出没有密钥的任何文件来优化脚本。 一旦有了我们的结构,我们将点击validateMissingKeys() -将遍历我们的LocalizationCodeFile集合,并减去基本键的每组键。 此结果中的任何其他键都不是我们基本键的子集,因此会给我们丢失的键。 如果找到任何丢失的键,则会引发错误。 我们的最后一个策略是搜索任何死键,这些死键是在可本地化文件中定义但未在我们的代码库中使用的键。 我们可以通过从flatization从LocalizationCodeFile集合中收集的所有键减去基本键来检索死键。 此处找到的所有键均显示为警告,因为此步骤更多是建议清除技术债务,而不是影响问题的用户。 对具有600多个可执行文件和估计800多个密钥的企业代码库执行bash脚本平均要花费81秒 。 在相同的代码库上运行此swift脚本平均要花3秒 ! 🚀🙌 保持干净 ,可读的代码库应该是每个工程师的目标。 通过将此Swift脚本注入到您的后期构建中,清理和维护可本地化的文件应有助于实现该目标并感到自动化。 您可以阅读我以前的博客,以了解如何将脚本注入到Xcode构建后编译中( https://buildingvts.com/clean-ios-localizable-files-8b910413b985 )。 我还在其中包括了一个包含整个脚本的GitHub项目以及此处的示例项目:https://github.com/ginowu7/CleanSwiftLocalizableExample。 随时发表任何意见或建议,您可以在Twitter @ ginowu07上关注我! 编码愉快! 🙏

Cara integrasi React Native Dengan Swift Dan CodePush(Panduan lengkap)-包。 2

Seteleh lama gak nulis di beberapa minggu terakhir karena aktivitas yang padat😌,akhirnya kali ini gua sempetin lanjutan dari artikel sebelumnya。 Ini bakalan singkat dan ga bertele-tele,cukup singkat karna sisanya cuma cara积分密码推送文件Swift kita。 安装Codepush Kita Pakai react-native-code-push yarn add react-native-code-push 喀麦店林克项目计划,印度塞拉利昂共和国 react-native link react-native-code-push Perintah tersebut akan menambahkan文件文件yang dibutuhkan secara otomatis。 dani untuk memastikan lagi,bisa kita […]