键入gcc main.c – Ekaterina Kalache –中会发生什么

键入gcc main.c会发生什么 gcc是一个进行预处理,编译,汇编和链接的编译器。 让我们更仔细地研究这些过程。 让我们在名为main.c的文件中编写一个简单的C程序(必须具有.c扩展名才能执行C程序)。 并在其中编写我们的代码。 保存文件并返回提示后,我们需要t0编译文件,以便可以执行它。 我们使用命令gcc和文件名。 这将开始编译过程,我们可以分为以下步骤: 1,预处理 预处理程序将删除注释(/ *此处的文本将被预处理程序* /删除)。 它还将包含来自标头(#include )的库。 它将用代码替换宏名称。 现在我们的文件进入编译器。 2.编译 编译器将生成一个汇编代码,并将我们的代码转换为汇编语言。 现在可以将其传递给汇编器。 3.组装 汇编程序会将代码转换为二进制代码,该二进制代码将仅包含1和0,因此计算机可以理解它。 现在,我们的代码已准备好传递给链接器。 4.链接器 链接器会将我们的代码与代码运行所需的库链接,并将所有内容打包到单个可执行文件中。 通过运行“ gcc main.c”命令后列出文件,我们可以看到它。 在我们gcc-ed main.c之前 在我们gcc-ed main.c之后 现在,我们有了名为a.out的可执行文件。 这是一个默认文件,如果我们不指定应将可执行代码放入的文件,则会创建该文件。 最后,我们可以继续执行代码。 我们还可以决定创建一个可执行文件,并使用– o选项将其命名为所需的任何名称,后跟所需的文件名,例如helloC。 在这种情况下,所有内容都将打包到可执行文件helloC中。

gDoc主屏幕

通过创建一个使用docs url架构转发到您的文档的html文件,从iPhone主屏幕打开一个gDoc文件。 我想以一种一键式方式从手机访问我的每日签入文档-问题是Google文档无法让您保存到主屏幕,并且无法在Safari中编辑文档。 是的,我可以将Docs应用程序保留在主屏幕上,但是如果最近未编辑该文档,则很难获取。 所以这里是解决方案:我创建了一个单行html文件,该文件使用docs应用url架构转发到doc: 为了使事情变得更加用户友好,我添加了标题和图标。 我知道我遗漏了所有其他(多余的)html🙂 示例文档 您可以从ios移动设备对其进行docs-homescreen测试。 您也可以在此处下载文件并对其进行自定义。 然后上传并使用Safari访问它,系统会提示您打开Goog​​le文档。 点击取消,然后将该网址保存到主屏幕。 现在,当您单击新创建的主屏幕图标(单击)时,它将要求您打开Goog​​le文档(单击),然后您将tadaa放入文档中。 两次点击! 本文最初出现在这里。

Core蓝牙入门

核心蓝牙 核心蓝牙是Apple提供的iOS框架,允许使用低功耗蓝牙技术开发应用程序。 该框架抽象了Bluetooth LE内部工作的一些技术方面,使开发人员可以专注于其实际使用。 中央x外围设备 蓝牙LE标准中的通信由两个主要角色构成:中央和外围设备。 外围设备是提供信息的元素:在客户端-服务器方法中,将是谁拥有其他设备所需的信息。 中央利用外围设备提供的信息来运行其任务,如下所示: 为了使中央可以看到外围设备,它发送广告数据包,指示其存在并将传输数据。 该数据包的尺寸很小,仅包含基本信息,例如外围设备的名称和所传送数据的类型。 中心进行扫描,换句话说,它“侦听” BLE广告数据包,以决定是否应从特定设备读取数据。 设备可以具有各种不同的服务,而不仅限于发送一种类型的信息。 温控器可以发送其实际温度及其最近的每小时读数。 外围设备提供的每个服务可以具有许多信息类型,称为特征: 如前所述,由于性能原因,广告包故意很小,它们没有列出外围设备可用的所有功能和信息。 由中心来询问外围设备具有的服务和特性的列表。 这些特征可以分为3种类型:读取,写入或通知。 在此示例中,我们将使用可写特征将数据发送到外围设备,而不仅仅是从外围设备读取信息。 这将颠覆我们先前将外围设备视为服务器而将中央设备视为客户端的概念,但将向您展示事物的灵活性。 让我们在Pratice中看到它 首先,创建一个新的单视图项目: 给它一个名称和项目的包ID,在下一个屏幕上选择“在Mac上创建Git存储库”,到此为止。 使用以下属性创建一个名为Constants.swift的新swift文件: 您可以在终端上使用命令“ uuidgen”创建一个UUID。 Core Bluetooth将使用此标识符来快速有效地找到您的服务。 为了简单起见,我们将有两个视图控制器,一个用于发送数据(外围),另一个用于获取数据(中心)。 您可以通过更改Main.storyboard中的视图控制器基类来选择要在每个设备上运行的设备。 PeripheralViewController(接收器) 在项目中添加一个名为PeripheralViewController.swift的新视图控制器。 在UIKit语句下,将Core Bluetooth导入其中: 另外,创建一个名为peripheralManager的属性来保存CBPeripheralManager的实例,并在viewDidLoad下对其进行初始化。 核心蓝牙几乎可以使用了。 为了能够处理外围设备响应(并停止XCode的警告消息),请将其添加到PeripheralViewController.swift文件的末尾: 我们的代码仅应在用户打开蓝牙无线电时运行。 外围设备管理器代表有一种方法,该方法在每次蓝牙状态更改时运行。 将其添加到最近创建的扩展中: 现在,当状态更改为开机时,很好地打印一条消息并调用一个名为startAdvertising()的方法,如下所示: startAdvertising()最初调用createPeripheralService(),后者创建一个可写服务以用于接收消息,该消息将由另一台设备的中央设备写入。 外围设备管理器收到写调用时,将触发didReceiveWrite委托: CentralViewController(发送方) 在项目中添加一个名为CentralViewController.swift的新视图控制器。 在UIKit语句下,将Core Bluetooth导入其中: 另外,创建一个名为centralManager的属性来保存CBCentralManager的实例,并在viewDidLoad下对其进行初始化。 我们需要一个集合来保存对我们发现的外围设备的引用,因为如果Core Bluetooth没有强大的引用,它们会自动取消分配它们。 在外围示例之后,在CentralViewController.swift的末尾添加此扩展名: 这次,当蓝牙状态更改为打开时,中央管理器将开始使用与外围设备管理器中使用的SERVICE_UUID相同的外围设备进行扫描。 这样,中心将仅扫描具有该特定服务的设备,而不扫描附近所有可用的蓝牙设备,这将导致不必要的电池消耗。 当中心发现一个新的外围设备时,它将其添加到我们的createdPeripherals集合中并尝试连接到它: 之后,如果外围设备已连接,我们将尝试发现其服务,并出于与发现外围设备相同的原因指定SERVICE_UUID。 […]

Bundler是iOS开发人员的好朋友

这是“ 一切都与工具有关 ”周期 的第2条 。 所以, 抽象 Bundler是一个简单而强大的Ruby gem依赖管理器。 等等,为什么标题为“ iOS developer”的Ruby? 答案很简单-两种最流行的iOS开发工具(cocoapods和fastlane)几乎完全用红宝石编写,并以Ruby gem的形式分发。 尽管您可能尚未使用fastlane,但您肯定已经听说过cocoapods,并且我99.99%的人肯定在开发过程中使用了cocoapods(或使用了它,但停止使用Carthage)。 所以,让我告诉您一些有关上述宝石的故事… 故事1 最近,我意识到我的机器上确实堆满了XCode游乐场: 其中一些是Swift独立的,另外一些则必须嵌入XCode项目中,因为它们应该与Alamofire,ReactiveSwift等3d方库一起使用。 我决定为此目的创建一个XCode项目“ PlaygroundsHost”,用我正在使用的最广泛使用的Pod填充它,然后将所有Playground缓慢移入该项目以将它们保持在单个位置。 将3d-party库集成到游乐场的流程很简单: 创建一个新项目。 关闭它。 在根文件夹中创建一个Podfile。 装上必要的豆荚(例如Alamofire) 运行pod install 运行open *.xcworkspace打开新创建的工作区 创建一个新的Playground,将其放置在项目文件夹中的某个位置(在我的情况下为$PROJECT_DIR/Playgrounds/MyPlayground.playground ) 将创建的Playground拖到XCode中。您将看到类似以下内容: Cmd + B构建所有Pod和项目 完成后,您现在可以在操场上使用import Alamofire了。 您的XCode Project Navigator选项卡如下所示: 好吧,我做到了…… 错误:无法查找符号: __T09Alamofire7requestAA11DataRequestCAA14URLConvertible_p_AA10HTTPMethodO6methods10DictionaryVySSypGSg10parametersAA17ParameterEncoding_p8encodingAJyS2SGSg7headerstFfA3_ 我很困惑,尝试使用Google问题,结果发现可可足类1.4.0和1.5.0之间的游乐场集成出现了问题。 我的本地版本是1.5.2。 一个人可以将可可豆的版本降级到某个版本吗? 绝对可以。 在项目之间进行切换时,是否值得一直上下使用版本? 绝对不… 故事2 我的开发人员几天前曾问我,我是否现在正面临一个奇怪的问题,即他正在CI配置上,而在导出存档时却遇到了“ Lottie.framework不支持配置文件”的构建失败。 我们聊了一会儿,猜测该问题可能与cocoapods更新及其Copy Frameworks构建阶段有关。 […]

在Xcode 10中启用新添加的选择加入功能

在WWDC 2018期间,Apple宣布了具有许多新功能的Xcode 10。 其中的许多功能会自动为您提供并默认启用,但其中一些功能可能不会显示,需要进行一些手动调整。 代码折叠 要启用它,请在“ Text Editing > Editing下打开首选项,然后选择Code folding ribbon 。 增量构建 在其他年份中,我们当中许多人可能会使用“ Whole Module编译模式来缩短构建时间。 正如苹果在博客上告诉我们的那样: 全模块优化是Swift编译器的优化模式。 整个模块优化的性能胜利在很大程度上取决于项目,但是它可能高达两倍甚至五倍。 建议今年,我​​们建议不要隐式使用“ Whole Module编译模式,而应使用“ Incremental以获得更好的结果。 默认情况下,应在Xcode 10中启用此功能,但您可能需要在项目中进行验证。 正如Apple在“ Swift的新功能”会议中提到的那样: 使用 整个模块 进行 调试 构建是改进构建的权宜之计。 整个模块 可防止增量构建。 定义正确的优化级别 自Swift 4.1起可用,有一个新的优化模式可用,该模式可以进行专门的优化以减小代码大小。 更深入的细节可以在Swift博客文章Swift 4.1中的代码大小优化模式中阅读。 提高测试性能 Xcode 10引入了许多与测试性能有关的改进。 单元测试和UI测试的完成速度都比过去快得多。 通过打开测试方案设置,可以启用三个新选项: Execute in parallel on Simulator 。 这将在多个模拟器上并行运行UI和单元测试,并大大加快测试速度。 Randomize execution order […]

有史以来最好的工具! Gangstar Vegas Resources Generator作弊设备2018

您想要这款游戏的Diamonds吗? 您一直在寻找吗? 今天的您很幸运,因为我们可能会给您Gangstar Vegas秘籍,因此您可以根据需要获得尽可能多的钻石。 我们的作弊工具可以免费使用,也没有任何病毒和恶意软件。 我们的工具是完全安全使用的,因此不用担心。 大佬拉斯维加斯秘籍由在线测试黑客 如今,我们将向您展示gangstar vegas作弊技巧黑客工具,该工具可能会为您提供游戏中的无限资源。 您可以最大程度地利用一切,并与您的在线黑客工具一起解锁一切! 在所有android和iOS设备上也鼓励使用此黑客工具! 只需输入您的用户名和BOOM就可以了! 立即使用在线测试工具进行检查! 我们确保所有人都已经意识到这个出色的游戏,想象一下在自己的移动智能手机上玩GTA。 该游戏是开放世界游戏,这意味着您可以自由漫游并进行所有您想做的废话。 Gameloft在制作这款游戏​​方面一直做得非常出色。 在这个游戏中,您当然可以做很多事情,例如射击一群人,驾驶汽车或只是像普通玩家一样执行故事任务。 单击此链接:https://test-on-line.info/gangster-vegas-cheats/了解更多信息。 此游戏中有大量枪支和汽车。 但是,您将需要大量钻石才能在该游戏中拥有乐趣,因为该游戏充满了这种微观交易。 您很幸运,我们因黑帮维加斯钻石小故障而欺骗了游戏。 黑客的手段是个人使用游戏故障来找到您游戏帐户中的钻石。 在互联网上所有模仿和欺骗的Gangstar Vegas黑客中,我们的Gangstar Vegas 2018生成器都经过定期测试,其中间人稳定度达到9%到7%以上。 这意味着我们的Gangstar Vegas Gems生成器可以在您的手机上完美运行,而不管它是Android OS,iOS平板电脑。 我们的“测试在线黑客”可以是完全免费的完全免费的工具,没有任何问题和病毒。 保护者禁令功能将确保您获得安全的游戏体验。 该事件可以继续保留游戏所有者的用户ID,这样您就永远不会受到游戏的限制。 您好,今天我们将亲自面对您分享一个出色的Gangstar Vegas mod。 这个在线测试技巧非常特别,因为它可以在android和ios装置上很好地工作。 您可以通过浏览器直接在线使用它。 hack Gangstar Vegas游戏不需要遵循很多必要的过程。 我们的Gangstar Vegas在线黑客mod为您提供了大量的iOS和Google android现金,真正的零价格。 我们的黑帮维加斯mod可能会应用于各种Android和iOS智能手机。 您无需越狱手机就可以使用它。 因此,如果您想使用有保证的工具来为Gangstar Vegas生成很多游戏中工具,那就别再犹豫了!

可编程逻辑控制器VH-10MR(2A继电器输出)

品牌 :活力 型号 :VH-10MR 可编程逻辑控制器(PLC)或可编程控制器是坚固耐用的工业数字计算机,适用于控制生产流程,例如组装线或机器人设备,或任何需要高可靠性控制且易于编程的活动和过程故障诊断。 它们最初是在汽车工业中开发的,旨在提供灵活,坚固耐用且易于编程的控制器来代替硬接线的继电器和计时器。 从那时起,它们就被广泛用作适用于恶劣环境的高可靠性自动化控制器。 PLC是“硬”实时系统的一个示例,因为必须在有限的时间内响应输入条件产生输出结果,否则将导致意外操作。 特点和规格: 输入类型: DC 24V电源输入 6点DC 24V信号输入 输出: 2A继电器输出/ 4点继电器输出 输入电压: 24V DC 有关更多信息,请访问我们的网站: www.autocon.biz 由Autocon Instruments发布

没时间让初创公司的农民-四十年代的事情如何满足并建立千禧一代的社交平台

我和妻子于2008年离婚,就像任何38岁的离异夫妻一样,我是一个没有朋友的男人。 幸运的是,那时我是一名专业音乐家,并且在夜总会里度过了很多时间。 结果,我在酒吧遇到了大多数婚后好朋友,而且您可以猜到他们还年轻得多。 Facebook爆炸正在进行中,我的新千年朋友自大学以来就一直在使用FB。 我通过做所有错误的事情很快学到了东西,如果您在喝了一夜后检查了FB帖子,您就会明白我的意思。 在短短的几周内,我成为了一个毫无歉意的社交媒体迷。 同年,我在一家与Zippo,阿迪达斯和其他知名品牌合作的eComm公司工作。 在大多数设计师都渴望获得mgmt角色的时代,这使我能够提高自己的品牌技巧。 另一个好处是与天才兼职的Phil Pastorek会面并一起工作,他是我曾经与之合作过的最好的开发人员。 我们经常谈论起步理念,但从未发现任何东西可以帮助我们。 切入2016年。单身生活已成灾,现在该是恢复我的身体,思想和精神的时候了。 有了健康的睡眠,饮食和运动习惯,我的头脑开始因创造力而爆发,四月的一个晚上,我从一次沉睡中醒来,完全意识到了我们现在称为Hitcher的整个社交平台。 我充分利用了千禧一代,社交交流和大品牌的经验,并且知道自己在做某事。 经过3个星期的反复,Phil是我打来的第一个人。 他喜欢这个主意,并成为了我的第一位联合创始人,但我们俩都知道找到iOS开发人员是成败关键。 在接下来的三个月中,我参加了所有可以想象到的社交活动。 在我上次MeetUp召开三个小时后,我决定退出会议。 在我走楼的路上,我碰巧碰了碰我看到的最后一个女人,问道:“您是iOS开发人员在寻找创业公司吗?”她回答是。 那个人是梅丽娜·史瑞莎(Merina Shrestha),是加入我们抹布车队的第三个人。 在我们一直在祈祷的价值观和背景下,她被证明是一位了不起的开发人员,而命运却无法给我们带来更好的帮助。 我们三个人采取了行动,但我承担了太多的责任,觉得有必要克隆自己。 我需要一个从事过技术工作但可以戴上与我一样多的帽子的人。 我认识完美的人,这是我们的故事传遍整个故事的地方 。 2016年6月,我的前妻Priscia Chavarria接受了我的报价,并加入了我们的小公司。 作为全球最大的咨询公司之一的职业PMP和技术策略师,她非常适合。 这也是一个容易的决定,因为这些年来她仍然是我最好的朋友。 希切尔队终于完成了。 自从将最后的部分放在一起以来,这组由40多个对象组成的小组一直在一个真正令人惊叹的平台上执行和迭代,并且我们已经证明人们在产品和市场方面一直存在错误。 敏捷主义者可以继续质疑我们的能力,但是我们总是拥有年轻团队所没有的一件事-经验。 这是一个屡获殊荣的职业专家团队,我们正在执行任务。 我们将继续前进,直到我们在过程中耗尽激情或改变世界。 *广告中的真相-事实证明,菲尔(Phil)离40岁还差一点,可能会杀死我。 糟糕,抱歉。 此外,在最后一行中,我实际上引用了自己。 对不起,对不起。 花一点时间,了解有关 Hitcher的 更多信息 ,该产品可从2月16日在App Store上下载— www.hitcher.mobi 。

为iOS打开Sourcing ReactiveLists

在过去的几年中,PlanGrid iOS团队构建了许多内部API,使我们能够更快,更一致地发布新功能。 今天,我们将公开发布第一个组件-您现在可以在GitHub🎉上找到它。 我们的团队有许多开放源代码爱好者,并且我们还使用了大量开放源代码库,因此我们一直计划随着时间的推移发布这些组件。 使用UIKit进行声明式UI编程 ReactiveLists是一个类似React的API,建立在UITableView和UICollectionView 。 该API使我们能够编写无状态函数来生成用户界面。 根据我们的经验,这些无状态函数比*DataSource和*Delegate类型更容易理解,后者是向UIKit组件提供数据的标准模式。 API的用法通常类似于下面的示例,您编写了一个将数据映射到ReactiveLists视图模型的函数,从而产生了一个非常易读的无状态函数: 这不仅使UI代码易于阅读和迭代,而且使其易于测试。 我们的团队成员Benjamin Encz在他的演讲“将UIKit内外翻”中深入讨论了这种声明性UI编程方法的优势。 从封闭到开放 我们团队中有很多人为开源项目做出了贡献,或者从头开始创建了自己的项目。 事实证明,将在现有代码库中演化的组件开放源代码采购的经验大不相同。 我们花了几天的工程时间将组件移至其自己的Swift框架中,删除了对核心应用及其单元测试助手的依赖,将ReactiveSwift集成移至扩展中,并花费大量时间重命名API,改进文档和重构了测试套件。 最重要的是,我们构建了一个示例应用程序,使该库更易于理解。 这是开放构建的另一个好处-它提高了在我们代码库的大部分中使用的组件的数量。 准备生产,但不准备1.0.0 我们没有等到该库完成后才将其发布给公众,因为我们相信它在当前状态下会增加很多价值。 我们发布的版本是已经在PlanGrid iOS应用程序中发布了近两年的版本。 因此,我们绝对认为该库可用于生产。 也就是说,我们期待大量改进,并且API不断变化,因此将此版本发布为0.1.0 。 结论 我们认为这是与iOS社区共享一些内部API的第一步。 我们每天都看到利用开源软件的好处,并且很高兴能够做出贡献。

与fastlane和CircleCI的持续集成和交付

我们在Sixt希望分享我们为iOS应用程序进行持续集成和交付的方法。 在过去的一年中,改变我们制作CI和CD的方式对于我们的开发过程至关重要。 首先,让我们从我们的应用程序和团队的一些历史开始,以及如何影响我们对CI提供商的决定。 Sixt应用程序的第一版于2008年发布,我们的团队只有一名iOS开发人员。 那时,CI是没有必要的,并且所有操作都是手工完成的。 在将团队增加到3名成员之后,我们决定从CI开始使用Jenkins。 那时,这是合乎逻辑的决定。 Jenkins是免费的,我们可以将其托管在我们自己的硬件上,一次运行一个构建就可以了。 在2016年,我们决定迁移到TeamCity,并为我们的CI使用两个构建代理。 如今,我们的iOS团队由15位开发人员组成,他们构建了三个公共应用程序Sixt,DriveNow和MyDriver,以及多个内部应用程序。 随着最近几年的快速增长,出现了对新CI服务提供商的需求。 在此博客文章中,我们想分享我们当前的CI / CD管道。 CircleCi 从一开始就很明显,我们希望迁移到基于云的CI提供程序,因为我们自己的硬件的托管和维护花费了开发人员过多的时间。 对我们来说,两个最重要的指标是启动时间和并发性。 在比较了几个提供商之后,我们决定选择CircleCI,因为他们似乎非常满足我们的需求并且看起来已经足够成熟。 单击此链接开始使用CircleCI。 CI管道 现在到我们当前管道的实际外观有趣的部分。 我们正在使用fastlane运行所有脚本,CircleCI只是根据触发它的分支执行不同的通道。 以下是分支和通道如何连接的一般概述: 除了运行上述构建计划外,我们还将在每晚构建中运行整个测试套件。 这包括我们的单元以及UI测试。 在接下来的段落中,我们将完成项目的初始设置和代码签名,创建单个通道并在CirleCI上运行所有程序。 苹果开发者门户 首先,我们需要在门户中创建我们的应用程序标识符。 转到此页面并填写必要的信息。 每个构建配置都需要一个应用程序标识符。 对于此帖子,我们的基本捆绑包标识符是com.name.app,因此我们必须创建以下应用程序标识符: com.name.app com.name.app-dev com.name.app-alpha dev和alpha应用程序标识符是在我们的企业帐户中创建的。 允许在任何设备上部署。 快车道 如上所述,我们将使用fastlane运行脚本。 一个好的做法是使用Gemfile锁定依赖项。 在项目的根目录中创建一个Gemfile,并将fastlane添加为依赖项。 接下来,您将需要根据配置更改包标识符。 转到您的“应用程序目标”->“构建设置”,然后搜索“捆绑标识符”。 它看起来应该类似于: 配置代码签名的最后一步是更改签名设置。 转到常规标签,禁用“自动管理唱歌”,然后为每种配置选择正确的配置文件。 您应该在下拉列表中看到一个符合条件的配置文件。 我们的最终结果如下所示: 测试车道 下一步是创建用于运行我们的不同测试套件的通道。 我们有一条用于单元测试,UI测试的通道,并且可以运行所有通道。 记住要替换您的工作区和方案。 之后,进入项目设置并将用户部署密钥添加到项目非常重要。 这允许快速通道匹配来克隆我们的证书存储库。 再次在这里,我们建议您使用bot github帐户添加用户ssh密钥。 […]