Tag: DevOps

Xcode Server + Ansible:可扩展和可编程的iOS CI / CD基础结构

原始文章:原始文章已发布在我的个人博客XCBlog上,继续阅读 此处 以获得更好的图形。 要阅读有关iOS DevOps和iOS CI / CD的更多有趣文章,请 在此处 访问我的博客 。 关于Xcode Server的抱怨之一是它不能扩展用作大型或企业级。 但是,如果您具有理解和管理用于iOS部署的基础结构的技能,则可以使用iOS和DevOps工具包的混合为中小型或大型iOS团队轻松实现可伸缩性。 过去,在我之前在Photobox Group工作时,我们使用工具Ansible + Fastlane + TeamCity的组合实现了这一目标。 您可以在此处阅读我在Moonpig Engineering博客上的博客文章,以了解我们如何实现这一目标。 在这篇文章中,我们将看到学习Ansible和Apple的CI解决方案Xcode Server之类的DevOps工具如何可以轻松地管理大规模的iOS CI / CD基础架构。 与iOS相比,iOS开发的持续集成实践并不理想,因为iOS开发有一些独特的挑战。 必须了解整个iOS生态系统才能为团队设置和管理CI / CD基础结构。 一些高级/高级iOS开发人员或iOS技术架构师/主管非常了解Apple开发人员工具,技术和基础架构的全部堆栈,并在其项目中实施,但是目前业内大多数iOS开发人员只是iOS开发人员,他们擅长编写Swift或Objective-C为Xcode内部的应用程序构建UI。 但是,在了解基础架构时,它们确实很烂。 他们没有正确理解Xcode在幕后使用的底层工具和技术,这就是为什么他们完全无法设置或管理iOS应用程序的CI / CD做法。 因此,他们始终必须依赖本地Xcode或DevOps团队的人员来管理所有基础架构堆栈,否则CI / CD将由昂贵的第三方服务来处理。 这意味着开发人员不是完整的堆栈,也不了解他们自己的工具和技术。 不幸的是,iOS开发的世界充满了这类业余爱好者和烦恼的开发人员。 没有团队中的熟练工程师,持续集成将不会成功。 在我以前的文章中,我写到了CI失败的5大原因。 这些是错误选择的CI服务器,CI Amature工程师,缺少作为代码的基础架构,质量差的构建服务器以及团队缺乏支持。 除了iOS工程师无法理解整个iOS生态系统之外,iOS生态系统的自动化还存在一些传统挑战。 其中一些是由苹果专有软件强加的,而其他则是由于缺乏自动化iOS和macOS基础架构的工具。 一些常见的挑战是 缺少可用于自动执行基础结构的配置管理工具。 Chef,Ansible和Puppet不适用于macOS服务器。 缺少用于配置和自动安装软件的官方软件包管理系统。 我们必须使用第三方解决方案,例如HomeBrew 缺乏官方的依赖管理工具。 我们必须使用迦太基或Cocoapods来管理依赖关系。 Swift […]

安全编码-如何在Xcode Project中保护您的安全信息

有时,在调试/构建应用程序时,我们可能需要在源代码中保留敏感信息。 它可以是密码,用户名,令牌,客户端ID,秘密值等 。 我们需要确保这些信息的安全性,以便您的开发团队以外的其他任何人都无法使用。 Apple iOS构建包机制是如此强大且安全,因此通常人们无法轻易地从appstore构建中提取源代码。 但是我们仍然不安全,因为开发人员使用git或任何其他存储库来处理其源代码。 在提交更改时,这些敏感信息也会随之发送。 这些数据可以随时被破坏。 在某些项目中,安全信息会保存在后端系统中,并在打包时与应用程序捆绑在一起。 无论如何,这里我将讨论一种简单的方法来确保您的敏感信息在Xcode项目中的安全。 创建一个名为Secrets.swift的快速文件,并添加一些常量(这是保存所有敏感信息的单个文件) 下一步,打开终端,然后移至创建Secrets.swift文件的文件夹。 $ cd /用户/文档/工作区/ SecretApp / SecretApp / 使用openssl有许多可用的加密方法。 您可以在下面的行中输入其他有效的密码名称值 $ openssl enc -h 在我们的示例中,我们使用AES-256加密。 现在在终端中输入以下行,然后按Enter $ openssl enc -aes-256-cbc -salt -in Secrets.swift -out Secrets.swift.enc 将会询问: 输入aes-256-cbc加密密码: 输入有效的密码来保护文件。 按下Enter键后,系统会要求您再次确认密码。 再次输入相同的密码,然后按Enter。 现在,如果您查看创建Secrets.swift的文件夹, 则可以看到另一个创建的文件: Secrets.swift.enc 。 该文件将是我们的安全加密文件。 接下来,创建一个空的txt文件(将其命名为Script)并将其保存在.xcodeproj文件所在的文件夹中。 打开文件夹,然后将文件重命名为Script.sh 。 系统将要求您确认更改 单击按钮Use.sh 现在,在文本编辑器中打开Script.sh文件,然后在下面的行中键入。 #! / […]

2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019做准备

原始链接: 2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019做准备 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告是… shashikantjagtap.net 2018年:iOS版本和CI / CD流程的年度最大变化。 如何为2019年做准备– XCTEQ 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告是… www.xcteq.co.uk 在2018年,Mobile DevOps和CI / CD世界被一些重要的公告和新闻所动摇。 这些公告来自Apple或开源社区,但是这些公告肯定会改变传统的iOS应用CI / CD制作方式。 在本文中,我们将回顾2018年,展望2019年。我们将看到2018年iOS应用程序的Mobile DevOps和Continuous Delivery中发生了哪些变化,以及它将如何影响iOS中的iOS版本和CI / CD流程。 2019。 在2018年的元旦,苹果收购了BuddyBuild,Mobile DevOps中的情况发生了巨大变化。 BuddyBuild是针对移动应用程序的出色云CI / CD服务之一。 自从BuddyBuild成为Apple的一部分以来,他们就停止了对Android应用程序的支持。 也停止了为iOS应用吸引新客户。 这对于使用Android和iOS的BuddyBuild服务的公司来说,是一个巨大的震惊。 这些公司需要为Android应用程序寻找另一项CI / CD服务,这将导致昂贵的迁移工作。 对于使用基于云的CI / CD服务的公司来说,这也是一个重要的教训,这使他们思考是内部管理移动基础架构还是将其外包给其他公司。 我们在这里介绍了内部管理移动DevOps基础架构的利弊。 苹果与BuddyBuild的合并也使Xcode Serve的未来成为问题。 对于目前使用Xcode Server的公司来说,这也是一个警钟。 寻找适用于Android和iOS的通用跨平台移动CI […]

2019年Stack Overflow开发人员调查中的移动开发人员要点

原始链接: 请阅读原始链接以获得更好的图形和格式。 2019年Stack Overflow开发人员调查中的移动开发人员要点 Stack Overflow发布了2019年开发人员调查,这可能是世界上最大的技术调查。 按照… shashikantjagtap.net XCTEQ的Stack Overflow Developer Survey 2019中的移动开发人员总结 Stack Overflow发布了2019年开发人员调查,这可能是世界上最大的技术调查。 按照… www.xcteq.co.uk Stack Overflow发布了2019年开发人员调查,这可能是世界上最大的技术调查。 根据Stack Overflow的统计,全球有将近9万名不同年龄,种族,性别,国籍和经验的开发人员。 该调查包括所有流行,喜爱和恐惧的技术/工具。 您可以在此处阅读详细调查。 Stack Overflow还列出了调查的主要结果,其中包括以下几点 Python是增长最快的编程语言 DevOps Specialist和SRE是收入最高,最令人满意的工作。 中国拥有世界上最乐观的开发商。 有毒的工作环境是生产力的主要障碍 这些是Stack Overflow的主要结果,但有些事实在2019年临近时我们不容忽视。在本文中,我们将介绍与移动应用程序开发相关的一些事实。 热门美食 与去年相比,今年的调查发现一些非常特殊的事情。 我们将介绍前7个外卖菜: 1] Swift:爱的增加 Swift,现代,快速和类型安全的编程语言Swift也在今年获得了更多的喜爱! Swift在最受欢迎的编程语言中排名较高。 与去年相比,斯威夫特的爱情从65%增长到69%。 用于原生Android开发的类似Swift的编程语言Kotlin的恋爱率从75%下降到72%,但Kotlin仍然主导着编程世界。 毫无疑问,在Apple的支持下,Swift的热爱将在不久的将来继续增长,并得到一群有才华的贡献者的支持。 2] Visual Studio Code已成为IDE的主导者 不管您是Web开发人员,移动开发人员还是DevOps工程师,Visual Studio Code都在整个领域占据着主导地位。 就本机移动应用程序开发而言,Xcode和Android Studio仍然是首选,但Visual Studio Code在所有地方都占主导地位。 毫无疑问,DevOps / […]

我在2017年震惊的10件事:XCBlog的年终回顾

在新年前夜,我非常需要完成XCBlog的这篇评论结束才能感谢2017年。如果您是XCBlog的读者或关注者,无论是在我的个人博客上还是Medium或DZone上,您都必须对开发之外的iOS工程充满热情在Xcode中。 有数以百万计的开发人员使用Xcode编写Swift或Objective-C代码,但是当您跳出固有思维并热衷于深入探究iOS令人讨厌的事物时,真正的热情就会浮出水面。 XCBlog涵盖了疯狂的iOS工程活动,其中包括 深入了解iOS基础架构/生态系统 用于构建自动化,发布自动化,测试自动化和基础架构自动化的脚本 设置持续集成,持续交付管道 通过命令行处理代码签名,iOS构建设置 Swift的软件包和依赖管理 为CI / CD设置和设置macOS服务器 了解命令行Apple Developer工具 了解云连续集成服务 了解苹果的持续集成系统,即Xcode Server iOS DevOps 处理这些事情需要勇气和简洁,co夫永远不会触及这些领域。 这就是XCBlog在这里的原因。 我很高兴看到其他极客iOS工程师如何解决这些挑战,向他们学习,撰写并分享知识。 好。 回到主题,2017年是XCBlog最好的一年,我对2017年不胜感激。它为我提供了很多我可能无法用文字解释的东西,但我将尽力解释我在2017年取得的成就,学到的知识我很高兴与您分享我感到2017年的成就的几件事。 PS:如果您认为这篇文章中的内容是自夸,自夸或自我促进等,请提前道歉,但我需要这样做以保持我在2018年的热情,以尽我所能。 令我感到惊讶的是,我在2017年在我的个人博客上发布了63条帖子,并在Moonpig Engineering博客上发布了2条嘉宾帖子。这意味着该年度共有65篇帖子,每月5篇,每周1篇。 我今年显然写了很多书,并将继续写作。 我从2017年开始,撰写了关于Swift Package Manager-Dive Dive的博客文章,我计划于12月31日午夜发布该文章。 从那以后,我从未停下来,在一月份发表了10篇文章,并在全年进行。 我在1月和6月写了10篇文章,在9月写了9篇文章,这意味着我在这三个月中已经报道了一半。 我还在Moonpig工程博客上发表了两篇文章,分别在此处使用Fastlane的iOS持续交付和此处使用Ansible的iOS持续集成。 这意味着,我去年写了65篇以上的帖子。 我2017年的解决方案之一是为XCBlog发布iOS应用程序,我开始着手研究。 幸运的是,我设法在4月做到了这一点,但没想到我可以制作出如此美观的应用程序。 您可以从iOS的App Store下载“ XCBlog”应用。 XCBlog iOS应用程序具有一些功能,可以离线阅读帖子,为帖子添加书签以及在整个博客中进行搜索等。 XCBlog已于今年在其他各种渠道上发布。 主要渠道是Apple News,DZone和Medium。 您也可以阅读这些来源上的所有XCBlog帖子。 在Apple News中,您可以搜索XCBlog频道以获取Apple News中的所有内容。 XCBlog在Medium也有专门的频道,您可以在这里找到Medium频道 XCBlog也定期在DZone上发布,我已经在DZone上获得了“最有价值的Blogger”徽章,用于iOS DevOps和Continuous Delivery上的帖子。 您可以在此处阅读DZone上的所有XCBlog帖子 我还在LinkedIn和Facebook上发布了帖子,以便可以吸引更多人。 […]

Xcode Server:启用代码诊断工具

原始文章:原始文章已发布在我的个人博客XCBlog上,继续阅读 此处 以获得更好的图形。 要阅读有关iOS DevOps和iOS CI / CD的更多有趣文章,请 在此处 访问我的博客 。 Xcode提供了一些很酷的工具,可以用来检测一些手动或功能自动测试难以捕获的疯狂错误。 除非它们对应用程序产生影响,否则很难找到与内存和线程相关的问题。 在我以前的有关在iOS CI上激活代码诊断工具的文章中,我们看到了如何在CI服务器上启用Apple的代码诊断工具,例如TravisCI或使用xcodebuild命令行工具的任何其他第三方CI服务器。 在这篇简短的文章中,我们如何使用Apple自己的Continuous Integration服务器(也称为Xcode Server)启用这些工具。 回顾一下代码诊断工具,Xcode具有四种不同类型的运行时工具,也称为代码诊断工具来查找问题。 这些工具是 地址消毒剂 Address Sanitizer(又名ASan)报告了与内存相关的问题,例如内存损坏和其他与内存相关的安全漏洞问题。 您可以在此处阅读有关Address Sanitizer的更多信息。 线程消毒剂 Thread Sanitizer aka TSan可检测数据争用问题。 它还检测其他与线程相关的问题,例如线程泄漏。 在Apple的官方文档中有关于Thread Sanitizer的详细文档。 主线程检查器 主线程检查器是随Xcode 9一起推出的新工具,该工具可检测到Apple框架(如UIKit,AppKit等)的无效使用,这些框架本应在主线程中使用,但意外地在后台线程中使用。 未定义的行为消毒剂 未定义行为Sanitizer aka UBSan在运行时检测代码中未定义的行为。 这些行为包括除以零,从未对齐的指针加载内存或取消引用空指针。 您可以在此处阅读有关UBSan的更多信息。 Apple在代码诊断的官方文档页面上提供了所有这些工具的简要文档。 我们可以通过“编辑方案”->“运行/测试”->“诊断”从Xcode方案设置中启用所有这些工具 您可以看到所有这些工具都可以通过使用复选框来激活。 需要注意的一件事是,您不能同时启用线程清理程序和地址清理程序。 从Xcode 9开始,Xcode Server内置了Xcode应用程序,因此无需获取macOS服务器即可启动Xcode Server。 我们可以直接从Xcode启动服务器并开始创建Bot。 在Xcode 9中,创建Bot时,我们有一个名为Arguments的选项卡,并且在arguments中,我们可以找到该部分以添加其他参数Arguments传递给xcodebuild 我们可以使用该部分来启用代码诊断工具。 我们可以传递不同的参数来启用地址清除器,线程清除器或未定义的行为清除器。 […]

将Fastlane集成到iOS项目:第1课

在使用Fastlane之前,它需要完成以下安装。 安装Ruby版本管理器(RVM) Fastlane由Ruby编写,建议安装Ruby Version Manager(RVM),以帮助您管理ruby路径,价值和配置问题。 安装指南参考RVM安装指南。 安装mpapis公钥 gpg-密钥服务器hkp://keys.gnupg.net-接收密钥409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 使用Ruby安装稳定的RVM \ curl -sSL https://get.rvm.io | bash -s稳定–ruby 安装Xcode 在Mac中打开您的App Store应用,搜索Xcode并下载。 如果要下载其他版本,请检查Beta版本或更旧的版本。 安装Xcode命令行工具 Xcode命令行工具可帮助您为Xcode做命令行开发人员。 安装Xcode命令行工具 xcode-select-安装 安装Fastlane 通过gem安装Fastlane [sudo] gem install fastlane -NV 检查Fastlane是否已安装 哪个快车道 如果成功安装了Fastlane,它将在您的终端中显示已安装的路径。 解决UTF-8问题 Fastlane需要正确的环境才能交付构建。 请执行以下步骤来解决UTF-8问题。 cd〜/。 打开。 点击Shift + command + . 显示所有隐藏文件夹(您可以在Mac中使用它显示/隐藏隐藏文件夹)。 打开名为.bash_profile文件,将以下代码复制并粘贴到该文件中。 导出LC_ALL = zh_CN.UTF-8 出口LANG = en_US.UTF-8 下一步是什么? 下一课,我们将开始将Fastlane集成到您的iOS项目中。

Swift + Docker + Kubernetes =来自macOS的出色部署

原始链接:阅读原始链接以获得更好的代码语法和格式! Swift + Docker + Kubernetes =来自macOS的出色部署 目前,Kubernetes是DevOps行业中最热门的工具,用于自动化,管理和扩展部署…… shashikantjagtap.net Swift + Docker + Kubernetes =来自macOS的出色部署– XCTEQ 目前,Kubernetes是DevOps行业中最热门的工具,用于自动化,管理和扩展部署…… www.xcteq.co.uk 目前,Kubernetes是DevOps行业中最热门的工具,用于自动化,管理和扩展Web应用程序的部署。 但是,Kubernetes很少能够进入Swift和Apple的世界。 有服务器端Swift框架,例如Vapor,Kitura,Perfect等,它们正在做很棒的工作来在服务器上获得Swift。 为了使成熟的DevOps工具(如Docker或Terraform)能够提供部署,还正在进行着努力,以便公司可以在任何云平台上部署应用程序。 流行的云平台是AWS,Google Cloud,Azure,Heroku等。 在本文中,我们将看到在macOS上的本地Kubernetes集群上创建和部署Swift Web应用程序有多么容易。 要求 安装了Docker桌面应用程序(Edge版本)的macOS Mojave 带有docker-compose.yml的Dockerized服务器端Swift应用 Docker和Kubernetes部署的基础知识 在macOS上获取Docker + Kubernetes 随着Docker-Desktop的发布,在macOS上获取Docker和Kubernetes的过程变得如此轻松。 您只需要获取Docker-Desktop应用并在其上启用Kubernetes。 而已! 如果您熟悉命令行,但是还有其他解决方案可以在macOS(如Minikube)上本地部署Kubernetes,但是Docker-Desktop可以很好地工作并且可以通过UI轻松配置。 您需要获取嵌入了Kubernetes的最新Docker-Desktop应用程序。 此刻,我获得了包含所有服务的此版本 从Docker-Desktop启用Kubernetes服务非常容易。 只需转到首选项->选择Kubernetes选项卡,然后为本地部署启用以下功能。 几分钟后,您将看到Docker和Kubernetes服务正在运行。 在后台,Docker-Desktop已安装了Kubernetes的所有组件和CLI工具(如kubectl等)。 我们可以通过运行以下命令来检查Kubernetes集群信息,节点和上下文 $ kubectl版本 $ kubectl cluster-info $ kubectl获取节点 $ kubectl config当前上下文 […]

将Fastlane集成到iOS项目:第4课

上一课,我们使用get_certificates和get_provisioning_profile action为我们的iOS应用程序下载证书和配置文件。 这次,我们将使用另一个action来生成.ipa,并将其上传到Crashlytics和Hockey App。 在接下来的课程中,我将假设您的项目名为Bookshop。 创建构建 如下所示将build_app action添加到build_app的通道中。 在此之前,我将在项目中创建一个名为Adhoc的新配置。 使用连接的电缆将应用程序构建到iDevice时使用Debug 。 通过OTA(空中服务)分发应用程序时使用AdHoc ,例如Crashlytics和Hockey App。 Release上传到TestFlight和App Store时使用Release 。 创建配置后,我们还需要更新方案。 创建或更新项目方案,将“ Run ,“ Test以Debug ,“ Profile ,“ Analyze和Archive为Adhoc 。 (将在下一课中创建发布)。 我将该方案命名为Bookshop_dev_adhoc 。 如果您具有多个环境和项目配置,那将更容易理解。 之后,更新fastfile的lane 。 车道:build_app做 //从Apple Developer获得生产证书 get_certificates( 发展:错误, 强制:false, 用户名:, team_name:, 文件名:, output_path:“ fastlane_delivery / dev / adhoc /” ) //从Apple Developer获得生产证书 get_provisioning_profile( 即席:是的, app_identifier:, […]

Xcode Server + Slack =适用于iOS CI / CD的Rockstar Combo

原始文章:原始文章已发布在我的个人博客XCBlog上,继续阅读 此处 以获得更好的图形。 要阅读有关iOS DevOps和iOS CI / CD的更多有趣文章,请 在此处 访问我的博客 。 Xcode Server是Apple提供的持续集成服务,用于分析,构建,测试和存档iOS应用。 Xcode Server最近内置了Xcode 9,只需单击几下鼠标,即可进行iOS应用程序的持续集成和持续交付。 在撰写本文时,Apple仍未使用Xcode 9更新Xcode Server aka XCS的文档,但在我之前的文章中,我已经解释了如何为iOS应用设置Xcode Server with Xcode 9。 许多XCS用户抱怨Xcode Server缺乏第三方集成,但我认为并非如此。 XCS提供了编写集成前和集成后脚本以与任何可能的第三方服务集成的功能。 我们只需要了解Xcode Server和第三方服务提供的API。 在这篇文章中,我们将看到如何将Xcode Server与非常流行的通信服务Slack集成在一起。 Slack已成为大多数公司中最受欢迎的协作工具之一。 几乎每个人都喜欢Slack,因为它的光滑和令人敬畏的功能。 除非是Slack的竞争对手,否则几乎没有任何组织不会看到Slack。 Slack被用作组织内部进行协作工作的沟通渠道。 Slack具有一些令人赞叹的功能,例如工作空间,频道,机器人,webhooks等。 松弛通知可用于为开发活动提供反馈,例如静态分析,代码问题,测试报告和部署。 大多数持续集成服务器都在添加Slack集成,以提供有关部署管道的更新。 在iOS的世界中,我们可以使用Fastlane Slack操作来报告iOS开发活动的状态。 Xcode Server由Apple开发,因此除非进行业务级别的交流,否则不会提供任何内置支持,但是我们可以使用Slack API和Xcode Server后集成脚本的组合轻松地将其与Slack集成。 要将Slack与Xcode Server集成的第一步是了解我们可以在脚本中使用的Xcode Server环境变量。 列出了可用于Xcode Server的环境变量,但我们将看到Slack集成所需的一些有用变量。 XCS_BOT_NAME:可以在脚本中的任何位置使用它来获取当前的Xcode Bot名称。 XCS_INTEGRATION_RESULT:提供集成结果。 XCS_PRIMARY_REPO_DIR:这提供了集成的源代码,我们可以从中提取Git最后的提交或作者等信息。 XCS_PRIMARY_REPO_BRANCH:提供当前集成的分支名称。 […]