Tag: xcode

在Xcode中设置一个C / C ++ makefile项目:语法高亮,自动完成,跳转到定义等等!

在这篇文章中,我将向您展示如何设置Xcode,以便您可以在C / C ++项目中使用它。 它将允许您使用IDE提供的所有出色功能。 在撰写本文时,我正在使用Xcode 9.2和MacOS High Sierra。 我将以crazyflie 2.0固件项目为例。 它具有一个使用makefiles作为构建系统的C代码库。 第一步:获得构建项目的工具 在这种情况下,crazyflie项目需要用于Arm的GNU嵌入式工具链。 他们提供了许多安装选择(虚拟机,docker,从源代码构建,从ARM下载预编译的二进制文件),但是我发现的最简单的方法是使用此brew公式,该公式从ARM获取最后一个预编译的二进制文件并对其进行配置,因此您唯一需要做的是: $ brew tap osx-cross/arm $ brew install arm-gcc-bin 之后,您可以通过检查版本来验证正确的安装: $ arm-none-eabi-gcc –version arm-none-eabi-gcc(用于Arm嵌入式处理器的GNU工具7-2017-q4-major)7.2.1 20170904(发行版)[ARM / embedded-7-branch版本255204] 版权所有(C)2017自由软件基金会,Inc. 这是免费软件; 请参阅复制条件的来源。 没有保修; 甚至不是出于适销性或针对特定目的的适用性。 第二步:获取项目的源代码 在这种情况下,请获取crazyflie固件的源代码。 因为此特定项目使用git子模块,所以我们还需要传递–recursive参数: git clone-递归https://github.com/bitcraze/crazyflie-firmware.git 之后,该项目将位于名为crazyflie-firmware的文件夹下。 第三步:设置要构建的Xcode项目 首先,通过执行以下操作创建一个新的Xcode项目: 文件->新建->项目 在cross-platform选项卡下,使用External Build System模板。 给它起个名字并完成设置: 然后,转到主要目标的info选项卡,并将“ Directory字段更改为包含crazyflie源代码的目录: crazyflie-firmware 。 还建议传递-j参数以启用多核构建(更快!):在我的情况下,我有2个核,因此我传递-j2参数。 结果是: […]

找到内存泄漏的根源。

我真的很喜欢Emilien Stremsdoerfer的内存泄漏文章,并想在结尾部分进行扩展。 您可以启用称为Malloc堆栈日志的功能,这将使Xcode内存调试器能够找到导致内存泄漏的确切代码行。 去年在Visual Debugging WWDC会话中几乎没有涉及到这一点,我认为我应该与错过它的人分享。 启用Malloc堆栈日志记录: 首先,您需要启用Malloc堆栈日志记录。 这是每个scheme都启用的功能,因此您需要在用于运行/调试项目的任何scheme上启用它。 通常,您将需要在Run scheme执行此操作: 现在,您将拥有一个升级的内存调试器。 如果在应用程序运行时单击可视调试器,则可以浏览内存泄漏,如下所示: 都是一样的,但是如果您查看右侧面板,现在就可以直接跳到导致泄漏的行: 我必须重申Emilien Stremsdoerfer关于内存调试器有点误导的观点。 在我的特定情况下,问题的根源最终是来自缺乏弱声明的第三方框架的委托-Xcode并未将其列为泄漏。 但是,由于有了内存图,我得以对其进行跟踪并提交了框架的PR。 我还要提及的是,在调试内存泄漏时应打开和关闭此选项。 启用Malloc堆栈日志记录后,使用调试器逐步调试时,某些属性未完全记录下来,这会使调试代码变得困难。 祝您调试愉快! 👍🏼 www.daniel-williams.co

Xcode观察点

监视点用于监视变量值的更改,并在发生这些更改时触发调试器中的暂停。 因此,它们对于识别程序中与状态相关的问题可能非常有帮助-您可能不知道如何精确地追踪。 在其中一种方法中设置断点; 您可以在其中打印变量的值。 导航到变量视图 公开变量名称(例如,如果它是一个ivar,则通过扩展self) 右键单击变量名称,然后选择—观看 或者,您也可以键入LLDB控制台来设置观察点 监视集合变量 your_var_name 监视点监视您指定的变量的更改。 这意味着在设置变量的值时,将命中监视点。 将变量类型更改为“全部”。 检查变量的“值”。 注意 :观察点不会在程序执行之间保存。

如何为Ionic 3开发准备Linux / MacOS包装盒

本指南假定您的计算机的操作系统对于Mac用户是High Sierra 10.13.3 ,对于Linux用户是Ubuntu 16.04 。 如果使用Linux发行版,请跳过iOS部分并继续至Android部分。 安装NodeJS 从以下链接下载并安装最新的LTS NodeJS: https://nodejs.org/en/ 注意:在编写本指南时, NodeJS的最新LTS版本是8.10.0 。 安装CLI 要安装全局依赖项,请运行: $ npm install -g离子科尔多瓦 注意:此命令将安装最新版本的Ionic和Cordova。 在撰写本指南时, Ionic的最新版本为3.20.0,而Cordova的最新版本为7.1.0 。 适用于iOS和Android平台的SDK环境 要准备添加和构建iOS和Android平台,请执行以下步骤。 的iOS iOS平台只能在MacOS上添加。 如果您不使用MacOS,请跳过此步骤并继续至Android部分。 安装Xcode 访问: https://developer.apple.com/xcode/ 并安装最新的Xcode版本。 安装CocoaPods 在您的终端上,执行以下命令以安装最新版本的CocoaPods。 $ sudo gem install cocoapods 启用命令行工具 安装Xcode后,需要启用几个命令行工具以使Cordova运行。 在您的终端上,运行: $ xcode-select-安装 有关iOS要求的更多信息,请访问: https://cordova.apache.org/docs/en/7.x/guide/platforms/ios/ 安卓 安装Java SE开发套件8(JDK) 访问Oracle网站并安装Java SE Development Kit 8。 […]

教程:将iOS 12 Siri快捷方式添加到您的应用程序–简单方法

嗨,大家好! 在这个简短的教程中,我们将学习如何通过NSUserActivity添加Siri快捷方式-最简单的方法。 我们将制作一个应用程序和该应用程序的快捷方式,以允许Siri启动该应用程序,并在您说“嘿Siri,更改视图颜色”时将其显示为红色。 首先,使用Single View应用程序模板创建一个新的XCode项目。 然后,您需要在项目设置的“功能”部分中启用Siri。 之后,让我们将数组类型的NSUserActivityTypes字段添加到info.plist文件中。 将一个成员添加到该数组,其字符串值为’(您的捆绑包ID).makeRed’。 项目配置的最后一步是将Intents.framework添加到链接的框架和库中 现在让我们深入了解代码! 打开ViewController.swift文件,并添加一个公共的makeViewRed()函数,该函数会将视图的背景颜色更改为红色。 IBAction实际上正在工作,您现在应该可以在Spotlight搜索中看到此活动,甚至可以使用它创建快捷方式。 要走的路! 剩下的一件事是-在Siri启动时实际上在我们的应用程序中处理该快捷方式。 为此,只需添加应用程序(_:continue:restorationHandler 🙂 到您的AppDelegate.swift,然后从其中调用ViewController上的makeRed()函数。 现在,让我们在Siri&Search iOS设置中为我们的活动创建快捷方式,看看现在可以处理了! 在上面的视频中,您可能会看到该项目的演示。 我不得不将快捷方式短语更改为“更改视图颜色”,因为我不敢让Siri识别“红色”为“红色”而不是“已读” 如您所见,向您的应用程序添加基本的快捷方式功能是一件轻而易举的事,但它还有更多功能,我们一定会在以后的教程中介绍! 您可以在我在github上的repo中找到本教程的完整源代码。 你喜欢吗? 在评论中让我知道! 🙂

没有情节提要的Swift中的字符串本地化

不久前,我迅速发表了一篇有关字符串本地化的类似文章。 该博客文章将对其进行改进。 创建一个.strings文件以在其中存储本地化的字符串。 在我们的例子中,它们是KZ.strings,EN.strings。 下一步,我们创建名为LocalizationLanguage的枚举,以便在进行本地化操作时更加类型安全。 它的原始值将为String类型。 实际上,要存储我们应用程序的当前语言,我们应该可以将其存储在某个地方。 如果是iOS,则为UserDefaults 。 它是我们应用程序中一些初始用户数据的本地存储。 我们可以轻松地存储String,Date,Data等类型的值。但是我们需要存储一个枚举,这里需要一些解决方法。 如上所示,我们的枚举具有类型为Int的属性索引 。 为了将语言存储在UserDefaults中,我们将存储其rawValue ,因为在UserDefaults中可以保存其String类型。 使LocalizationLanguage枚举符合Codable(Decodable&Encodable)协议。 因此,在这里,我们只有一个名为LanguageManager的类,可以分隔应用程序内的职责。 最后,使用称为localized()的本地化方法扩展String类型。 而已! 谢谢!

排名前五的Cloud iOS持续集成服务器奥运

iOS应用程序的持续集成(也称为CI)是我最喜欢的主题之一。 随着iOS团队中开发人员的增加,持续集成对于每个iOS项目都至关重要。 到目前为止,我对用于iOS项目的自托管CI服务器(如Xcode Server,TeamCity和Jenkins)具有深刻的经验。 但是,市场上仍然存在着一系列基于云的CI服务,这些服务在最近几天变得越来越流行。 这些基于云的CI服务有很多文章和推文。 我热衷于尝试这些服务,并通过将它们与我最喜欢的个人项目结合使用来获得一些机会 XCFit 。 为了做到这一点,我决定参加一场奥运会比赛,其中涉及大多数基于云的iOS持续集成服务候选人。 目的 除了TravisCI,我参加过的大多数服务都是我以前从未使用过的。 对我来说,这将是个很好的机会,让我自己熟悉那些CI服务并使用我的个人项目XCFit比较它们。 这次奥运会的目的是分享我对基于云的iOS CI服务的经验和第一印象。 请注意,本竞赛的目的不是推荐您应为iOS项目使用的特定服务。 竞赛的全部目的是尝试分享这些基于云的iOS CI服务的第一印象。 免责声明:所表达的观点仅是我个人的观点,并不代表这个世界上任何其他人的观点或意见。 此评估仅针对 XCFit 项目 执行 ,并且可能因项目而异。 奥运选手 参加奥运会的选手是最常用的基于云的CI服务器,它支持iOS和macOS平台。 当前列表中有这些球员 BuddyBuild 比特里斯 TravisCI 永不编码 CircleCI XCFit:游戏 这项奥林匹克竞赛将与XCFit项目进行竞争,我们将使用该库来尝试上述CI服务的功能。 这是我最喜欢的宠物项目XCFit之一,该项目是一个小型库,使我们能够以行为驱动开发(又称为BDD)的方式编写XCUITests。 此项目是CI服务器测试的有趣候选者,因为它包括 随CocoaPods和Carthage发行的Swift框架 可以通过Swift Package Manager分发的Swift Package 使用Carthage构建的XCFit框架的示例应用程序 使用RubyGems分发的Ruby包下载Xcode模板 由于该项目涉及很多工作,因此有趣的是,看看所有这些基于云的CI服务器如何对待该项目以在各自的平台上运行构建。 奥运田径 奥林匹克运动会,我们将用于本届比赛的是 注册和项目设置 默认构建配置 生成执行 建立人工制品和测试报告 真实设备测试 构建定制 并行化和并行构建 建立管道 基础架构即代码 […]

使用Transporter从Linux处理iOS App元数据

苹果公司在WWDC18上宣布了新的AppStore Connect API,可直接与App Store通信。 为了更多地了解这些API,请参阅以前的博客文章。 这显然是巨大的,并且改变了游戏规则,但苹果公司还宣布了另一件事,这可能是在WWDC会议上有关“ App Store Connect的新功能”的注意事项,它支持Linux平台上的Transporter工具。 这意味着我们现在可以使用Linux服务器上载和验证iOS应用程序元数据和预览。 在本文中,我们将探讨如何使用Trasporter工具使用Linux服务器处理App Store。 在开始使用Linux之前,让我们评估一下Trasporter是什么以及目前如何在macOS服务器上使用它。 运输工具也称为iTMSTrasporter。 iTMSTransporter代表iTunes Music Store Transporter,它是Apple基于Java的命令行工具,用于上传应用程序二进制文件,上传屏幕截图,更新应用程序元数据,管理应用程序价格,管理应用程序内购买等。该实用程序是Xcode随附的,因此只要您具有Xcode,就无需显式安装它。 二进制文件可以在这里找到: $ /Applications/Xcode.app/Contents/Applications/Application \ Loader.app/Contents/itms/bin/iTMSTransporter 您可以在$ PATH中添加以上内容,以便可以直接从终端使用ITMSTransporter。 现在,我们可以使用以下方法探索Trasporter随附的各种命令行选项 $ iTMSTransporter-帮助 我们可以按照Apple官方文档中的说明为Trasporter工具提供各种选项,但我们可能很少需要与验证和上传元数据有关的选项。 总之,这是三步过程 使用lookupMetadata参数下载应用程序的.itmsp文件存根软件包。 使用verify参数验证应用程序包的内容。 最后,使用上载参数将应用程序包上载到iTunes Connect。 Transporter可以验证元数据并将其上传到App Store,但是上载伙伴必须经过Transporter认证过程的批准才能使用此交付方式。 以前使用的交付方式是Signiant和Aspera。 有第三方方法,而不是Apple的方法。 借助macOS,Trasporter附带了Xcode,因此无需明确安装。 在网上搜索时,我在此博客文章中找到了macOS的Traspoter工具的位置 https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/resources/download/Transporter__OSX/bin/ 但是,当涉及到Linux时,没有Xcode,因此我们需要找到Apple官方服务器上某处托管的二进制文件的位置,然后在Linux上安装。 为了安装Trasporter,我们需要以将运行Transporter工具的用户身份登录。 苹果公司根据内容类型托管了Trasporter工具,例如对于音乐:http://itunespartner.apple.com/music/tools。 我们必须选择Red Hat Enterprise Linux链接才能下载shell脚本安装包。 我们将获得压缩包iTMSTransporter_installer_linux.1.9.8.sh.gz,然后可以根据您的Linux风格使用合适的解压缩软件来解压缩该软件包。 $ gunzip iTMSTransporter_installer_linux.1.9.8.sh.gz 该软件包具有shell脚本,我们需要使用admin用户明确运行该脚本。 $ sudo […]

为iOS项目设置Travis CI

在本文中,我将指导您为iOS项目设置Travis CI。 什么是 持续集成(CI) ? 持续集成是一种经常合并小的代码更改的实践,而不是在开发周期结束时合并大型的更改。 目的是通过以较小的增量开发和测试来构建更健康的软件。 开始一个新的XCode项目 在GitHub上创建存储库 准备好存储库后,将代码推送到存储库。 测试xcodebuild命令 xcodebuild 干净的 构建测试– 项目 Travis_CIDemo / Travis_CIDemo.xcodeproj – 方案 Travis_CIDemo – sdk iphonesimulator – 目标 “平台= iOS Simulator,OS = 12.1,名称= iPhone 6” ONLY_ACTIVE_ARCH = NO CODE_SIGNING_REQUIRED = NO 我们将使用此命令为travis-ci创建yml文件。 xcodebuild 要了解有关xcodebuild的更多信息,可以使用终端帮助进行详细的文档记录。 在终端上,只需输入: 男子 xcodebuild 特拉维斯CI 作为一个持续集成平台,Travis CI通过自动构建和测试代码更改来支持您的开发过程,并提供有关更改成功的即时反馈。 Travis CI还可以通过管理部署和通知来自动化开发过程的其他部分。 先决条件 1.一个GitHub帐户。 2.托管在GitHub上的项目的所有者权限。 Travis CI入门 […]

天哪,Codable太棒了

在上一篇文章中,我用滚动视图描述了我的短暂尝试,其中包括以下部分: 为了帮助您了解所见,我在Intertubes上寻找了引人注目的数据馈送示例,并最终选择了USGS地震馈送。 只是。 因为。 为了整理提要,我认为我可以快速给新的Swift Codable协议打转,那时候我就知道了Frickin 很棒的 Codable是什么。 但这是下一篇文章。 抓紧。 您现在可以停止收紧。 这是那篇文章 。 我们将深入研究Xcode 9和Swift 4的Codable功能。 我们将从我在滚动视图文章中提到的GeoJSON feed示例开始,然后使用RolePlayingCore Github存储库更深入地研究更多示例。 首先:简单地遵循Codable 我从一个仅包含几个项目的基本结构开始,然后迅速使用嵌套结构和枚举来构建它。 GeoJSON提要足够简单( 请参阅此处的链接 ),Swift提供的自动生成的构造函数和编码键非常有用。 我总结了一下,涵盖了大约一半的属性,大部分是有趣的属性: 现在,我没有尝试解决使用JSON可能引起的一些棘手的问题。 但这主要是因为该示例不需要它,无论如何,我花更多的真实代码(例如RolePlayingCore GitHub存储库)来揭示有关Codable的更深层真相的旅程很快就会花光。 “所有软件在编写后即会成为旧版。”-实用程序设计师Andrew Hunt和David Thomas 好的, 很好 。 那也不是真实的代码,但是由于我已经花了一些时间在JSON解码上,所以我在六个月的令人震惊的时间内建立了相当多的“旧版”代码,并且为后续工作提供了便利更深入到Codable。 所以。 CodingKeys,解码和编码,天哪! 当您必须处理带有下划线或空格,拼合或不拼合嵌套类型的名称,或转换非本地JSON类型(例如发给子级Date)的名称时 ,您突然不得不为Codables添加样板。 但是,这非常简单,我几乎想跳过它,并继续处理更棘手的问题。 但。 让我们。 让我们从使用序列化已经可以与JSON一起使用的现有类型开始。 所以。 假设某些D&D 类特征,我们可能具有: 注意TODO。 好。 呼吁采取行动! 为这项开源计划做出贡献! 帮助我致富! 帮助我舒适地退休! 好,好,回到现实… 相应的JSON格式可能如下所示: 在Swift […]