Tag: xcode

Organizando环境没有Xcode

Quantas否视URL的apontando para diversos环境差异,trocandoconfiguraçéescomo Mixpanel,New Relic entre支出? Muitas凝视着,nãoémesmo吗? 用户定义的设置,简单的Podemos简化处理,tornando-o indolor,por meio? Nesse artigo vamos ver comar criar e acessar essasconfigurações,para que nosso应用程序可用于构建独立于目标estamos buildando的方案。 在配置文件中显示新的配置文件。 参照信息的配置。 发行公告,然后发布或调试: 在应用商店中购买,销售和销售的应用程序均已发布。 Neste caso,vamos criar mais duas配置:uma duplicando de版本e外部调试: Agora que definimos quaisserãoos Environmentales do nosso应用程序。 Podemos,então和déodesejada用户定义的设置。 参数菜单:Build Settings(设置设置)参数: Adicionando esse novo设置,将URL作为环境的URL。 Assim,vamos nomear nosso设置como BASE_URL: Podemos观测所使用的配置文件可以在成功的情况下使用,并且可以在环境中使用固定的顺序。 Nesses campos,vamos addicionar作为URL的desejadas e […]

探索NSTextField

最近,我正在一个简单的待办事项列表应用程序中玩NSTextField。 我想在每个待办事项中包含一个可编辑的文本字符串。 我写这篇文章是为了谈论我一直在申请的东西。 建立项目 这是一个待办事项列表,我将使用NSCollectionView构建基本的UI。 该布局是一个简单的基于行的垂直布局。 我可以使用NSCollectionViewFlowLayout轻松实现这一点。 显示待办事项 由于我要显示的待办事项内容非常简单,因此我选择一个NSTextField作为容器。 我还将默认textField变量链接到放置在该项目中的NSTextField组件。 现在,我可以通过设置“ textField?.stringValue ”轻松显示待办事项。 NSTextFieldDelegate中的回调 该协议实际上是NSControlTextEditingDelegate的扩展,其中提供了一些基于NSControl的委托方法,这些方法仅适用于文本编辑功能。 默认协议方法提供了在编辑文本内容之前和之后的挂钩。 通过编辑,这意味着在更改内容时在键盘上键入。 实际上,我想在单击该项目时收到通知。 然后,我可以修改内容,然后按“ Return ”以保存更改。 子类化NSTextField 为了通过单击该项目获得通知,我将在NSTextField中重写成为firstFirstResponder() 。 我还创建了相应的委托方法,以便可以在单击项目的基础上进行更改,例如显示插入符号或将应用程序更改为编辑模式等。 拦截返回键 这是通过实现有关命令选择器的委托方法来完成的。 每个键盘命令键都会生成此方法的回调。 通过比较当前的命令选择器,当按下“ Return ”键时,我会收到通知,命令选择器为“ insertNewline(_ 🙂 ”。 然后,我可以保存待办事项,然后更改回查看模式,等等。 摘要 NSTextField的工作逻辑与iOS的UITextField完全不同。 NSTextField委托的文档非常含糊。 在实现您的欲望逻辑之前,应该更谨慎一些,并回避这些回调。

编译Swift源

当您在专业领域有一定经验时,您希望与世界各地分享。 有人写文章,有人帮助另一个开发人员。 但是有人为开源项目做出了贡献。 几年前,Apple开源了Swift编程语言,因此任何人都可以获取源代码,对其进行构建,对其进行修改等。 在本文中,我将向您展示如何从源代码构建Swift,向您介绍一些陷阱,并向您展示可以在Swift中搜索错误的位置。 因此,让我们开始吧! 从源代码构建Swift 构建Swift很容易! 首先,您需要安装cmake和ninja 。 您可以通过从Homebrew或MacPorts安装它来做到这一点: brew install cmake ninja // via Homebrew sudo port install cmake ninja // via MacPorts 然后从git创建用于克隆源的文件夹并导航到该文件夹​​,例如: mkdir swift-source cd swift-source 将这个Swift仓库克隆到您的文件夹后: git clone https://github.com/apple/swift.git 接着: ./swift/utils/update-checkout –clone 至此,您的计算机上已经有了源。 然后,您需要构建它。 首先,您需要在计算机上安装Xcode 9 Beta 6(还必须为Xcode Beta 6安装命令行工具)。 如果您的计算机上安装了多个Xcode版本,则必须选择要使用的版本: 须藤xcode选择-switch /Applications/Xcode-beta.app 然后,您可以构建Swift: ./swift/utils/build-script -x 请注意,构建Swift需要大量时间。 对于我来说,在Macbook Pro […]

为iOS Release Train构建增量技术

XCBlog上的原始帖子在 这里 持续交付iOS应用对于保持在竞争市场中的重要性至关重要。 拥有基础架构以在向客户发布功能后立即向客户发布功能的公司赢得了公司之间的竞争,他们必须从本地Xcode的人那里进行手动发布。 在“持续交付”模式下,我们应该不断将iOS内部版本上载到iTunes Connect或TestFlight,以获取发布中涉及的所有技术人员和非技术人员的反馈。 只要我们具有适当的构建和版本控制过程,将构建上传到iTunes Connects不会有任何危害。 在这篇文章中,我们将看到在持续交付管道中自动递增内部版本号的最佳技术。 在进入iOS应用程序的自动内部版本号之前,我们将了解将iOS应用程序提交到App Store时版本号,内部版本号和发行火车的工作方式。 Apple拥有有关每个iOS开发人员都应了解的版本号和内部版本号的出色文档。 版本号和内部版本号的组合唯一标识一个应用程序向应用程序商店提交的内容。 版本号 iOS应用的版本号与以前的版本不同。 我们需要为新的应用发布创建单独的版本号。 它类似于使用语义版本控制在Github上创建发行版。 合法版本号将是1.0,1.1.1等,但是您不能将字母和数字(如abc.123)组合在一起,这将是非法版本号。 版本号无法重复使用,因此您必须预先确定主要版本和次要版本。 新版本号值必须大于以前使用的值,并且随后应递增。 当前版本号的值可以通过CFBundleShortVersionString键在iOS应用程序的Info.plist文件中找到,或者如果是上载的iOS应用程序,我们可以在iTunes Connect中进行检查以找到版本号。 我们可以使用Apple的agvtool命令行工具检查当前版本号 $ xcrun agvtool what-marketing-version 内部编号 可以为特定的版本号上载多个版本,但是,为特定的版本号上载的版本号应该是唯一的,并且应该是递增的。 内部版本号的值可以重新用于其他版本号。 使用CFBundleVersion键可在iOS应用程序的Info.plist文件中找到当前内部版本号的值。 我们可以使用Apple的agvtool命令行工具检查当前版本号 $ xcrun agvtool what-version 发布火车 针对特定版本的特定版本表单的发布版本提交的构建数量。 在发行版中,内部版本号按递增顺序排列且唯一。 该火车可以使用特定功能进行多个构建,并且如果需要,我们可以将任何构建升级到App Store。 简而言之,发布火车是持续交付的基础。 在发行系列中,很少有用于增加内部版本号的策略。 我们将看到它们中的每一个,并讨论哪一个最适合发布火车。 1. agvtool 苹果有本机命令行工具来处理版本和内部版本号。 我们可以启用agvtool并编写脚本来自动增加特定发行版中的内部版本号。 为了启用agvtool,我们需要确保在目标构建设置中正确设置了“ 当前项目版本”和“ 版本控制系统”属性。 选择目标构建设置,然后搜索“版本”。 现在,将“ 当前项目版本”设置为1,并将“ 版本控制系统”值选择为“ […]

Swift 4中的Web视图

您是iOS开发(Swift)的新手吗? 您要实现Web View吗? 如果您的回答是“是”,那么本教程适合您。 所以开始做这个。 注意:UIWebView已从XCode 9开始弃用,因此,如果您还支持iOS 10或更低版本,则适合您。 如果您的应用仅支持iOS 11+设备,请不要使用WKWebView而不是UIWebView 。 您可以使用SFSafariViewController轻松获得相同的结果。 阅读如何使用SFSafariViewController 点击这里。 步骤1: 创建一个快速项目。 第2步: 在视图控制器中添加一个UIwebView 。 添加一个UIActivityIndi​​catorView。 或您的自定义加载程序。 并为UIwebView , UIActivityIndi​​catorView (或自定义加载程序)设置自动布局。 第三步: 将您的所有连接与View controller连接。 1. WebView连接 2.装载程序连接。 连接后,View Controller将如下所示。 见下文。 👇 步骤4: 现在,我们将继续进行编码部分。 1.导入WebKit。 2.导入类中的Delegate(UIWebViewDelegate) 3.添加代理。 (webView.delegate =自我) 所以你的班级看起来像这样 步骤5: 现在这一点很重要,因为您需要首先了解UIwebView有多少个委托方法。 UIWebViewDelegate有4种方法 ,但是只用三种方法 复制这3种方法并粘贴到您的View Controller中。 👇 步骤6: 现在是时候在视图控制器中添加代码和逻辑了。 因此,让我们继续前进。 见下文👇 现在在 […]

与Jenkins,Xcode和GitHub的基本持续集成

在上一篇文章中,我论证了为什么单元测试和代码审查很有价值。 在这一篇中,我将向您展示如何建立一个自动化系统来执行这些原则。 在允许PR合并之前,我们将要求有人对其进行审查,并且所有单元测试都已通过。 开发人员在提交PR之前不应该运行单元测试吗? 是的,但是拥有护栏并没有什么可耻的。 专家通常会忘记一两个细节。 看看医院开始允许护士对医生实施检查清单时发生了什么。 2001年,约翰·霍普金斯医院的重症监护专家Peter Pronovost决定尝试[检查清单]……他和他的团队说服医院管理部门授权护士在发现医生跳过检查清单的步骤时停止医生治疗…… Pronovost和他的同事们监视了一年后发生的事情。 结果是如此惊人,以至于他们不确定是否要相信: 十天的线感染率从11%降至零。 因此,他们又跟踪患者十五个月。 在整个时期内仅发生了两次线感染。 他们计算出,在这家医院中, 清单已预防了43次感染和8例死亡,并节省了200万美元的成本 。 https://www.newyorker.com/magazine/2007/12/10/the-checklist 由于可能会出现错误,为什么不解释这些错误呢? 我们可以告诉计算机强制执行我们自己设计的清单。 有3个主要部分可实现这一目标: 设置Jenkins以构建和测试iOS应用 获取GitHub以加入Jenkins以触发构建并报告测试结果 配置GitHub阻止PR,直到所有检查通过 您将需要Jenkins在Mac上运行。 如果您不能这样做,请立即保释。 👋 Jenkins有大量的插件可以使您的生活更轻松。 我们想要的是: GitHub,GitHub API,GitHub身份验证和GitHub Pull Request Builder —与GitHub交互 JUnit —报告单元测试结果 Xcode集成-帮助我们构建iOS应用 要安装插件,请转到主页->管理Jenkins->管理插件。 然后检查“可用/已安装”选项卡。 您可能已经安装了其中一些! 首先,让我们构建我们的应用程序。 进行Freestyle作业,然后输入您的回购URL和凭据并指定您的主分支: 接下来,浏览至Xcode部分,并将其放入常规设置。 该插件的作用是在您的项目中运行xcodebuild ,并使其易于配置参数。 现在转到Advanced Xcode build options-> Advanced build settings 看到“目的地”参数了吗? 这指向您要测试的特定设备。 […]

iOS本地化Swift

Вотивсе,можетенаписатьдляпроверкивоviewDidLoad 打印(“ title” .localized) Иполучить Теперьлокализуемназваниеприложениянаустройстве СновасоздаемString File, называемегоInfoPlist 本地化…本地化: Должнополучитсятак Заполняеманглийскуюверсию “ CFBundleDisplayName” =“测试”; Вауля! PS: Мойканалпосвифтовымзаметкамвтелеграме@SwiftBox

序列化自定义词典

更新:新的Swift 4过度简化了此过程, 请查看如何 通过Swift 字典和NSDictionary编码之间的自动桥接,更常见的String到Object字典非常简单。 但是,当我们想使用任意对象作为键时,情况会发生变化。 常规词典仅对键类型强制实施可哈希和等价协议。 如果我们要构建持久性类,则可以从NSObject继承这些属性。 另外,我们需要实现NSCoding进行序列化。 类项目:NSObject,NSCoding {…}各种数量:[Item:Int] 使用NSKeyedArchiver保存该对象的方式应为: 让_ = NSKeyedArchiver.archiveRootObject(self,toFile:file) 但是,当尝试还原实例时,会发生一个模糊的错误: 让restore = NSKeyedUnarchiver.unarchiveObject(withFile:file) //例外:[MyClassName copyWithZone:]无法识别的选择器发送到实例 事实证明,由于某种原因,NSDictionary还要求密钥类型符合NSCopying。 一个简单的实现可以解决: 类项目:NSObject,NSCoding,NSCopying { func copy(with zone:NSZone?= nil)->任何{ 返回项目(名称:名称,库存:库存) } … 这是一个完整的工作示例:

什么是PlistBuddy?

PlistBuddy是mac内置程序,可帮助用户编辑.plist文件。 当您使用CFBundleXXXX文件时,它对于编辑很有用。 与其他程序不同, PlistBuddy未设置为默认路径。 如果需要运行PlistBuddy ,则需要运行usr/libexec/PlistBuddy 。 检查帮助菜单 键入/usr/libexec/PlistBuddy –help显示PlistBuddy帮助菜单。 菜单不是很长,您可以看看。 (检查下图) 2种不同的编辑模式 使用PlistBuddy编辑plist文件时,有2种不同的编辑模式。 我使用“ 编辑模式”和“ 直接模式”来命名它们。 并且,我们将首先使用“ 编辑模式”来解释命令。 之后,我将列出直接模式命令。 编辑模式 :进入编辑模式,如vi编辑,如果要应用更改,必须最后保存。 (更容易,cmd输入最少) 直接模式 :在终端中键入cmd,它将立即将更改应用到文件。 让我们打开终端并开始键入命令。 编辑模式 1.创建.plist /usr/libexec/PlistBuddy /info.plist 2.添加键值对 添加:version字符串1.0 3.打印列表内容 打印 4.添加数组 添加:student arr 添加:student:字符串tom 添加:student:字符串可能 添加:student:字符串约翰 5.添加字典 添加:活动字典 添加:activity:swim字符串10-6 添加:activity:运行字符串9-6 6.保存 保存//保存文件 7.删除元素,数组或字典 删除:version 删除:学生 删除:activity:swim 删除:活动 8.还原 恢复//恢复到最后保存的文件 9.退出 退出//退出编辑模式 […]

自定义MacOS App图标-多个Xcode版本

作为iOS开发人员,我经常处理多个Xcode实例,并且总是感到困惑,哪个图标代表哪个版本。 例: 1. Xcode 9.4.1 2. Xcode 10.0 3. Xcode 10.1 那时我意识到我们实际上可以添加自己的自定义图标。 好吧,我很高兴你问! 步骤1:建立您的自订图示 作为一个好的手势,我将在此处提供一个PSD File以便您还可以编辑Xcode实例的图标(如果您也是iOS开发人员:)。 您也可以将上面的图像另存为PNG File ,并在下一步中使用它。 步骤2:套用自订图示 转到“ Applications -> Xcode -> Right Click -> Get Info在“信息”屏幕中,找到左上角的当前图标,单击一次,您应该看到它带有蓝色边框突出显示。 在预览中打开自定义图标图像文件 。 复制图像内容并返回到“ 获取信息”页面,并且蓝色突出显示仍处于活动状态, 粘贴。Tadaa! 您已经应用了自己的自定义应用程序图标 ! 您可以对任何应用程序执行此操作(我相信,除非有阻止它的方法),您将能够拥有自己的外观和感觉!