Tag: 开发人员工具

对现有证书使用快速通道匹配,而无需吊销它们

Fastlane匹配极大地改善了代码签名,即使对于小型团队而言,其唯一的问题是默认情况下它不适用于现有证书,这对试图在现有项目上使用它的任何人来说都是一个停滞点。 但是,有一种欺骗快速通道匹配的方法来使用您现有的证书。 match是https://codesigning.guide概念的实现。 match创建所有必需的证书和配置文件,并将它们存储在单独的git存储库中。 每个有权访问该存储库的团队成员都可以使用这些凭据进行代码签名。 匹配还会自动修复损坏和过期的凭据。 这是在团队之间共享签名凭证的最简单方法 https://docs.fastlane.tools/actions/match/ 让我们开始吧,首先,您需要设置fastlane和fastlane匹配,为了不重复文档,只需按照那里的设置步骤进行操作: https://docs.fastlane.tools/getting-started/ios/setup/ https://docs.fastlane.tools/actions/match/#setup 重要提示:我建议您花些时间阅读整个文档,但在匹配指南上,请仅遵循设置步骤! 不要执行其余步骤,因为这会导致Fastlane为您的应用生成新的证书/配置文件。 现在您有了匹配设置,但是证书为零,并且由于它将证书存储在加密的存储库中,因此您不能简单地将现有证书添加到其中, 它将无法正常工作。 正确的方法是使用fastlane文档中的隐藏功能,该功能使您可以解密匹配存储库并对其进行更改。 在此之前,请确保已将证书和私钥导出到计算机上的某个位置。 为此,请打开“钥匙串”应用程序并转到“ Certificates类别。 选择您要使用的证书(该证书必须是您的应用程序正在使用的证书),然后通过打开上下文菜单并选择“导出:…”来导出该证书: 选择“证书(.cer)”作为“ 文件格式” ,然后保存在您记得的地方。 现在对“ 导入的私钥 ”执行相同的操作,这次选择“个人信息交换(.p12)”作为“文件格式”,然后保存。 不要在导出的密钥上放置密码,否则match将无法导入它。 下一步是验证该证书的ID,此信息不容易看到,因此我们需要使用Spaceship来抓取它,它是一个由fastlane直接创建的Ruby库。 由于您已经设置了快速通道,因此您已经可以访问它。 通过在终端上运行irb启动交互式红宝石外壳。 输入require ‘spaceship’并按回车键,这将在当前shell会话中导入库。 现在运行以下命令在Apple Portal上登录,如果正确设置了快速通道,它将检查您的凭据并登录。 飞船登录 现在有必要获取您帐户中可用证书的列表,有两种方法可以使用 太空飞船证书 基本上打印所有证书,或者使用限制性更强的调用 宇宙飞船证书发展 和 太空飞船证书生产 取决于您要使用的证书类型。 该列表将包含每个证书的所有属性,您需要查找刚刚保存的证书的详细信息,查找名称和创建/到期日期。 找到要查找的密钥后,请重命名先前保存的密钥和证书,以将该ID作为名称。 注意: Fastlane更改了下一步需要使用的一些方法,因此,在必要时,我将明确地将命令分为两部分,一个用于Fastlane版本≤2.105.2,另一个用于较新版本。 有关更改的更多详细信息,请参见https://github.com/fastlane/fastlane/issues/13521。 打开加密的存储库 在交互式外壳上运行以下命令,以设置一些稍后将使用的变量: 版本≤2.105.2 irb(main):001:0>需要“匹配” irb(main):002:0> git_url =’git@github.com:path-to / […]

宣布可可足类产生

抬起头,我们已经搬家了! 如果您想继续了解Square的最新技术内容,请访问我们的新家https://developer.squareup.com/blog 在Square,我们将CocoaPods用作iOS开发工作流程的核心部分,除了在测试套件中使用的库之外,仅在Square Point of Sale应用程序中就有大量库。 这些库中有许多都生活在我们的主要iOS monorepo中,并且随着应用的增长,构建整个库所需的时间也越来越长。 CocoaPods允许我们将所有库配置保留在易于阅读的podspec文件中,与Xcode项目相比,在pull请求中查看它要容易得多。 我们的项目配置很少在Xcode本身中进行管理,这确保了文件系统与Xcode中所见内容之间的一致性。 但是,将所有这些模块集成到单个项目中存在一些缺点。 尽管我们已经投入了很多精力来改善安装依赖项的整体性能,但是运行单个pod install命令可能需要一到两分钟,这在快速迭代单个库时会加起来。 使用CocoaPods还会生成一个非常大的Pods项目,这可能导致Xcode的响应速度变慢,并且需要很长时间才能建立索引。 随着这种爆炸性的增长,显然我们需要开发人员更好的工作方式。 我们希望能够隔离地处理模块,仅构建正在积极处理的模块并仅运行随附的测试套件。 输入pod gen。 我们构建了一个CocoaPods插件,该插件使iOS开发人员可以轻松地独立处理各个库,尤其是在monorepo的情况下。 运行此插件将生成一个存根应用程序项目,该项目将集成并链接指定的库及其依赖项。 我们完整的Pods项目大约需要95秒才能生成,并且是35.6万行。 如果我们在U​​I组件库上运行pod gen,则将花费5秒钟并生成9000行项目文件。 这使得在这些基础库上的迭代变得如此快,并且工具可以轻松地处理较小的规模。 关于gen的最酷的事情是它会自动从现有Podfile和Podfile.lock中引入依赖项限制,因此所有配置都将在生成的库工作区中进行镜像。 这不仅在用于独立开发的monorepo上下文中有用。 当与可从podspec中描述测试的功能结合使用时,它在独立的存储库中也可以很好地工作。 这使独立库可以避免检入和维护自己的Xcode项目,因为CocoaPods可以对其进行管理。 这意味着您不再需要处理PR中的Xcode冲突,因为.xcodeproj只是生成的用于开发的工件。 podspec本身成为描述您的库的真理源,您可以使用简单的pod gen命令从中生成工作区。 可以简单地将测试放在文件系统中的相应文件夹中,并将其作为CI的一部分运行。 例如,我们设置了这个演示仓库,我们需要签入的唯一配置是podspecs。 我们已经在内部使用这种宝石几个月了,很高兴与世界分享它!

如何使用Appcode和Swiftify加快应用程序到Swift的转换

Swiftify提供了多种将Objective-C代码转换为Swift的方法。 如果您使用AppCode而不是Xcode进行开发,则可以使用Swiftify的AppCode插件直接从编辑器中转换代码行或整个文件的选择。 优点 AppCode的可扩展性使其成为一个理想的IDE,可将您的Objective-C项目逐步迁移到每个文件的Swift。 它使您能够: 同时转换.h和.m文件对,与Swiftify的Xcode扩展名不同,由于Xcode Source Editor扩展名的限制,Swiftify的Xcode扩展名一次只能处理一个文件。 借助内置的AppCode项目文件解析器,自动更新Xcode项目文件。 无需离开AppCode或使用外部工具即可完成整个转换。 安装插件 要安装Swiftify AppCode插件,请转到AppCode菜单,然后选择首选项 。 从侧面板中选择插件 ,然后选择底部的浏览存储库按钮。 搜索“ Swiftify”,然后单击“安装”按钮。 最后,重新启动AppCode以开始使用插件。 入门 在开始将代码转换为Swift之前,您需要添加API Key 。 转到Swiftify扩展页面,然后复制您的API密钥。 返回AppCode,打开AppCode> Preferences ,选择Tools ,然后快速化并粘贴您的API密钥。 在AppCode中打开您的应用,然后选择一个Objective-C类开始对其进行转换。 将Objective-C类转换为Swift AppCode插件可让您将代码行或整个文件中的一部分转换为Swift。 选择一些Objective-C代码,右键单击它,然后选择Swiftify> Convert Selection to Swift 。 您也可以通过单击“ 工具”菜单,然后选择“ Swiftify”来访问相同的选项。 要转换整个类,请从项目窗口中选择.h和.m文件,右键单击它们,然后选择Swiftify> Convert [FileName] to Swift 。 Swiftify将创建一个新文件,其中包含来自Objective-C标头的所有类和方法以及您选择的实现文件。 请注意,在这种情况下,Swiftify不会生成Objective-C桥接标头,因此,如果新生成的Swift代码使用Objective-C类,则需要手动创建桥接标头。 为了能够构建项目,请选择旧的.h和.m文件,右键单击它们,然后选择从Xcode项目中排除 。 这将从项目文件中删除对这些文件的引用,但会将它们保留在项目目录中,以防您需要再次返回它们。 确认一切正常后,可以继续从项目目录中删除旧的.h和.m文件。 选择下一个要转换的Objective-C文件,然后执行相同的步骤。 如果遇到错误,表明您的项目对刚转换的类的某个体系结构具有未定义的符号,请确保选择“运行”>“清理构建文件夹” ,然后再次构建应用,以进行清理构建 […]

使用Swiftify将SVProgressHUD转换为Swift

Swift被开发人员所喜爱,并且显然是Apple生态系统以及通用编程的未来,因为它已被Apple开源,并且全世界的开发人员都为它做出了积极的贡献。 Swift代码更快,更易读,看起来像脚本语言一样自然有趣。 Objective-C非常强大,大量框架和Apple框架的许多部分都用Objective-C编写。 鉴于Swift现在已经在Swift 5中实现ABI稳定性,因此作为一种语言已经达到了一定程度的稳定性和成熟度,因此通过迁移到Swift来开始将来对我们的代码和框架进行验证始终是一个更好的选择。 SVProgressHUD 是一个非常流行的库,被开发人员广泛使用。 它以其使用简单和简洁的设计而优雅。 Swiftify for Xcode是一个非常强大的工具,可以将整个Objective-C项目转换为Swift。 我用它来转换项目,结果非常好而且很快,但是当我简短地研究了项目代码时,我对代码的结构或功能没有深入的了解。 我意识到最好一次转换一个项目类,测试转换后的类,然后继续重复该过程。 我强烈建议您在自己的代码或经过充分研究并有深入理解的代码上使用Swiftify for Xcode。 如果您要转换不是您自己编写的代码或您不了解的代码,我建议一次迁移一个类,使用现有代码进行测试,然后重复该过程,因为以后将调试整个项目很难。 分而治之总是更好。 我的整体方法可以用图形表示为: 查看SVProgressHUD中的代码结构,我转换文件的顺序如下:- 因此,在将Swiftify用于Xcode之后,我又从头开始,转换的第一个类是SVRadialGradientLayer 。 此类用于添加渐变蒙版类型,并且仅在一个位置调用。 转换SVRadialGradientLayer.m并在SVRadialGradientLayer.h中添加属性和函数。 转换很简单,并且很快即可完成。 只需应用一个修复程序,只需一个简单的Google搜索即可完成。 之后,我从目标中删除了这个Objective-C类,添加了新的Swift文件并运行了该项目,该项目按预期进行了编译和运行,因此我继续下一个文件。 下一个要转换的类是SVProgressIndefiniteAnimatedView 。 此类用于显示两种类型的不确定动画视图,即本机设计和平面设计。 在本机设计中,ProgressHud使用和显示动画视图,在平面设计中,显示签名UIActivityIndi​​catorView 。 我将代码转换为Swift,将属性设为私有,并添加了用于设置和获取属性的函数。 接下来,我从SVProgressAnimatedView类开始,该类负责显示带有进度指示器环的HUD。 它仅支持平面样式,不支持UIActivityIndi​​catorView 。 现在是项目的主类,该主类与外部代码协调并使用这些类来呈现HUD。 这个课程非常复杂。 我使用了前面提到的技术,例如利用setter和getters函数,将所有类函数放在不同的类扩展中。 该类使用自身的单个实例,即它是一个独立的Singleton类。 所有的类函数最终都使用此Single Instance 。 在最终完成之后,我还花了一些时间清理不推荐使用的功能。 我从类函数开始,一次完成转换。 然后是更大的实例方法,它们是库的内容。 慢慢地,文件被转换,并在助手编辑器中使用Swiftify查找原始源代码。 代码转换花了一些时间,有几个问题让我使用原始SVProgressHUD文件和Swift版本文件运行项目,并通过查看运行时值的差异进行调试。 这就是在上面的流程图中 ,我不会删除原始的Objective-C文件的原因,直到代码转换完成并且Swift代码正在运行并经过测试。 现在,如果我们愿意,可以通过不删除@objc前缀,并在用作代码接口的函数和属性中添加@objc前缀来保持与Objective-C的兼容性。 测试之后,我从函数和self中删除了@objc ,并对库进行了增强以使其成为线程安全的 。 现在,您可以从任何线程使用该库,始终可以从主线程创建并评估单个实例 […]

Xcode 9自定义模板

作为开发人员,我们不断努力改善我们的开发流程。 无论是与编写代码,自动化某些事情有关,还是只是保持更高的生产力和专注力。 在这里,我们将讨论如何使用Xcode自定义模板来改进文件的创建。 我们中的许多人可能没有听说过它,因为Apple并未推广此功能,并且关于此主题的文档也很少。 但是无论如何,这样的功能仍然存在,并且可以使用一些预填充的样板代码极大地改善文件或整个模块的创建。 作为示例,我们将设置UIView模板,该模板还将创建一个相应的.xib文件,默认情况下Xcode无法创建该文件。 位置 这些用户定义的模板位于~/Library/Developer/Xcode/Templates/File Template 。 如果缺少此文件夹,则可以自己创建它,并且Xcode将在重新打开时链接到该文件夹​​。 您也可以将它们分组到该文件夹​​内的子文件夹中。 例如, ~/Library/Developer/Xcode/Templates/File Template/Custom Templates和Xcode在创建新文件时将正确地渲染这些组。 模板设置 每个模板都是一个扩展名为.xctemplate的文件夹。 该文件夹包含文件模板和资源,这些文件模板和资源将被填充并添加到项目和配置TemplateInfo.plist 。 用户可以在模板创建期间填写的所有模板设置和字段都在TemplateInfo.plist中定义。 在此plist文件中,您可以定义将用于模板选择对话框的图标。 模板的Kind可以有两个值,但大多数情况下是Xcode.IDEKit.TextSubstitutionFileTemplateKind ,另一个是Xcode.IDECoreDataModeler.ManagedObjectTemplateKind ,我们在这里不介绍它的用法。 下一项是Options数组,它可以包含各种输入字段,选择器,复选框等。每个字段都是不言自明的,只需注意Identifier字段用于用户提供的变量,这些变量可以在源代码模板中替换。 Type定义输入字段的类型。 可以是text , static , checkbox , combo , popup 。 让我们将TemplateInfo.plist文件放入用户定义模板下的UIView.xctemplate文件夹中。 文件结构应如下所示: └──文件\模板 │└──UIView.xctemplate │├──TemplateInfo.plist 重新启动Xcode之后,您应该看到模板如下所示: 并且在选择模板菜单后应如下所示: 现在,让我们看一下文件模板。 基本上,它们是具有预定义关键字的常规文件,这些关键字将在创建过程中被用户提供的值替换。 主要关键字是: ___FILEBASENAME___ —当前文件的名称,不带任何扩展名。 ___FILEHEADER___ —每个源文件的IDE预定义注释头。 ___VARIABLE_variable_name___ —用户在模板创建期间输入的自定义变量,以后可以在模板文件中使用,例如,我们有Subclass of:输入字段,用于为UIView定义继承。 让我们创建一个名为___FILEBASENAME___.swift文件,并使它看起来像这样: […]

iMate-iOS开发助手

iMate,iOS开发工具。 在设备和模拟器中显示应用和数据文件,在模拟器中安装,运行应用 用户说: “我尝试了几个类似的应用程序(OpenSim,…..),但这确实可以满足我的所有需求。 查找我当前Xcode项目的相应文件夹,安装/卸载应用程序,并找到这些f *** ng文件夹,这些文件夹使用50%的SSD来存储我(作为活跃的GIT用户)不需要的档案。 感谢开发人员提出清晰的概念” 网站 下载 Mac App Store(iMate Lite) 在iOS设备和模拟器中显示应用 在模拟器中运行,安装,卸载App 显示构建,存档文件,删除那些文件以节省空间 删除无用的模拟器 在iOS设备和模拟器中显示应用 2.显示构建,存档文件 3.在模拟器中运行,安装,卸载App

简易模拟器重置

这是一个简单,非常有用的技巧,每次与模拟器打交道时,可以节省几秒钟。 用⌘-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… […]

วิธีการติดตั้ง

netfox —一个轻量级的单行设置iOS / OSX网络调试库! 🦊 ทำiOSมาได้เกือบสองปีละแต่ก่อนเวลาจะดู请求,响应งใช้องใช้Charlesซึ่งต้องต่อWi-Fi,ยวกัน,ตั้ง代理,信任证书วุ่นวายพอสมควร CharlesCharlesี้นiOSแล้วนะให้สิทธิ์แก้ไขการตั้งค่าของเครื่องไม่ต้องตั้งค่าอะไรวุ่นวายแต่ต้องซื้อแยก ดีอดีinอtools toolsอ工具มาตัวนึงชื่อว่าnetfoxทางสว่างก็เกิดขึ้นเลยมาบอกต่อสามารถใช้ได้ทั้งiOSและmacOS applicationนะครับ ซึ่ง工具ตัวนี้ผมว่าดีในมุมของการ调试เองและลดงานระหว่างdevและtesterเช่นนtesterสามารถดูได้เลยว่า请求,响应ถูกต้องหรือไม่ก่อนที่จะมาหาiOS devและถูกไล่ให้ไปหาAPI dev (ฮา)และไม่ต้องเสียบสายดูLogcat(นั่นมันAndroidตะลึงตึงโป๊ะ) Giากตรงนี้ไปก็ข้ามไปดูในGithub https://github.com/kasketis/netfoxได้เลยหรือจะอ่านต่อก็ได้ 椰子纲 ใช้ายมากถ้าcoรใช้ cocoapods ลืมPodเข้าไปตัวนึงที่ Podfile ได้เลยอย่าลืม user_framworks! ด้วย use_frameworks! pod’netfox’ pod install าร pod install ให้เรียบร้อย 迦太基 ใช้รือถ้าใครใช้迦太基ก็ใส่ลงไปใน Cartfile ว่า github“ kasketis / netfox” ็จแล้วก็ carthage update –platform iOS –cache-builds ได้เลย(อย่าลืมปรับ命令ดูได้ที่https://medium.com/@phai/84cf004cb35c) 应用程序代码应用程序代理功能应用程序完成FinishLaunchingWithOptions 迅速 อย่าลืม import netfox NFX.sharedInstance()。start() 目标C [[NFX […]