Tag: github

自定义React Native图标? 是的

2.编辑Info.plist并添加一个名为Fonts的属性,该属性由应用程序提供(如果Xcode无法自动完成/不使用Xcode,则为UIAppFonts),然后键入刚刚添加的文件。 它看起来像这样: 步骤1 在Sketch或Illustrator中创建图标,并将它们另存为svg。 第2步 转到http://fontello.com/并上传您的自定义字体。 您也可以从它们的选择中进行添加,以使它们都保持相同的字体。 第三步 从Fontello下载字体文件并打开它。 复制文件夹(其中的所有内容)并转到您的本地项目。 进入保存资产的目录,并创建一个名为fonts的文件夹,然后将该文件夹粘贴到其中。 我建议将文件重命名为“ fontello”。 接下来,打开Xcode并执行与“基本安装过程”中所述相同的插入过程,但使用新的字体文件。 完成此操作后,返回到项目所在的文本编辑器。 步骤4 创建一个名为“ icon.js”的文件。 创建文件后,添加以下代码。 第5步 然后,在需要图标的组件中,您将可以执行以下操作: 希望这对像我一样挣扎的人有所帮助。 干杯!

iOS Huddle#4

2016年12月29日星期四 iOS Huddle是我们每月在Black Pixel iOS团队的Slack频道中共享的最佳链接的摘要。 反应式编程 如今,反应性编程似乎风行一时。 如果您对反应式编程感到好奇,我们认为Cocoa with Love的这篇文章很好地介绍了其背后的一些概念。 Matt Gallagher通过以下原则定义了反应式编程: 可变状态的任何“获取器”都会引起问题。 代替使用getter,任何计算,生成,加载或接收的状态值都应立即发送到通道中,并且想要访问这些值的程序的任何部分都必须订阅该通道。 本文就一些简单用例的KVO有多高提出了一些很好的观点,并概述了我们在使用它时遇到的一些典型问题。 与往常一样,反应式编程可能不是万灵药,但它提供了一种不同的方式来了解如何设计应用程序。 的GitHub GitHub现在允许您直接从PR中解决合并冲突。 对于最简单的问题,这是一个实时保护程序。 对于更复杂的问题,万花筒仍然是我们的最爱。 元编程 DRY是一个好概念,通常不那么容易实现。 有些人认为过早地进行DRYing类似于过早的优化。 其他人发誓。 无论您对DRY感觉如何,我们可能都同意的一件事是,样板代码的实现可能是乏味,重复且容易出错的。 我在看您,JSON序列化和NSCoding! 因此,为什么不使用一些不错的元编程和自动代码生成来替换其中的部分或全部。 这就是Sourcery可以为您做的。 您可以查看该崩溃报告吗? 我们中有多少人被问到这个问题并交出了未标记的堆栈跟踪信息? 没什么好玩的。 幸运的是,Apple写了一篇非常不错的技术说明,标题为“了解和分析应用程序崩溃报告”。 快速游乐场 Swift Playgrounds确实可以帮助您快速制作原型并测试想法。 操场也可以用来隔离一些特定的问题。 PlayAlways可让您直接从菜单栏中快速创建Xcode游乐场。 幕后花絮 当Instagram展示其如何重新设计其Feed时,深入介绍实现细节时,您知道您可能会学到一些东西。 Instagram软件工程师Ryan Nystrom的这次演讲并不令人失望。 对于任何好奇或渴望完善自己的工艺的人来说,这都是必看的。 尝试? 与As? 这是Erica Sadun撰写的简短文章,概述了如何混合尝试? 与作为? 和条件绑定可能会带来意想不到的后果。 我的记忆在哪里? 如果像我们一样,您是Mike Ash深入技术博客的狂热读者,您将对他的GOTO 2016会议演讲感到高兴:对Swift内存布局的探索。 请放大此文本 iOS 7为iOS应用程序引入了全新的视觉设计范例。 […]

为什么我们放弃传统的iOS网络

在开始讨论之前,我将先声明免责声明:这不是您的典型的I-a-a-fant-new-thing科技博客,具有非典型,晦涩的图案。 不,这是一篇有关采用常见的基本范式并将其应用于我们以前可能从未想到过的地方的文章,或者更准确地说,是在我们忘记了它们与之相关的地方。 软件产品往往会经历总结能力成熟度模型的相同阶段,转化为软件开发。 我们通常会坚持不懈地进行尝试并进行创新。 这是因为我们不想浪费时间和金钱来为尚未得到的答案过度设计解决方案。 我们希望将精力集中在发明新事物上,因此我们会避免为重新发明轮子做任何努力。 在我开发和制造的所有移动产品中,其中一个轮子始终存在: 网络。 在MINDBODY,我们已经维护和扩展了许多不同的移动产品超过四年。 同样,大多数软件产品具有相同的根源,我们的移动应用程序也不例外。 根据年龄的不同,每种产品在某种程度上都很大程度上依赖于许多人认为是事实上的开源网络库: AF网络 Alamofire MKNetworkKit 这些功能强大且受社区支持的第三方可解决任何Cocoa开发人员的大部分联网问题-Cocoa HTTP库的全地形轮胎。 但是,我们是一家企业,以此类推完整的圆圈,不能在Peterbilt上打一堆全地形轮胎并且期望行驶很远。 多年来,我们一直在不断改进这些常见要求: 将具有不同范例和传输格式的多个API整合到一个网络会话中的能力。 在单个会话中应用不同级别的授权和其他一次性装饰的能力。 具有满足以上两个要求的具有不同主机/客户端配置的多个会话的能力。 最重要的是,我们渴望拥有SOLID基础。 建立一个全新的网络层听起来很昂贵,冒险且彻头彻尾,这在很大程度上缩小了故障间隔。 最终,这意味着我们需要从以下两个问题的明确答案入手: 我们如何设计新车轮,以及如何将东西砸在行驶的汽车上? 设计车轮 曾经有人告诉我,“只有在第三次失败之后,新架构才能成功。”作为坚定地支持这一说法的人,我将转变话题,并略谈一下Node.js。 为什么选择Node.js? 不,我不会开始赞扬JavaScript及其动态的,松散类型的,嵌套回调的荣耀。 Node.js如此流行的原因是容易和简单,通常要付出代价。 但是在某些情况下,语言和平台为出色的模式提供了基础。 在我们的案例中,我们决定招待Express.js及其中间件模式的实现。 没有花哨的全局请求管理器到处都是路由规则,序列化模式,全局请求标头,过于简化的嵌入式授权机制,缓存策略等; 没有请求操作会承担太多责任,无法尝试使摆锤向模块化方向摆动太远; 无需花三个小时阅读有关所有工作原理的文档。 网络管道架构 当简化为体系结构时,我们发现针对任何给定请求有四个主要参与者: 管道 中间件的集合 请求 响应 在我们的Swift实现中, 会话与请求管道同义。 管道中显示的任何更改或全局行为将影响该会话内的所有请求。 会话客户端使用提供的URLSessionConfiguration管理单个管道,并且它直接接受URLRequests作为输入。 这意味着,网络架构是Apple网络库之上非常薄的一层 。 客户端只是简单地通过串行队列来收集请求,通过提供的中间件链来处理它们(每个请求可以不同),最后将它们传输到URLSession。 这满足了我们的第一个要求。 中间件范式 中间件组件具有基于具体实现的职责范围,但是它们都可以做三件事: 修改请求 冻结/清空输出管道 用错误使响应短路 中间件被定义为一个简单的协议,并且可以从任何地方定义和注入自定义中间件。 […]

TIL:重新定基

当我第一次开始基础调整时,我发现它令人恐惧。 我认为肯定需要进行重大更改,覆盖我为特定分支所做的所有工作,而成功做到这一点是不可能的。 但是,经过几次失败的尝试,我实际上可以说我在另一边还活着,现在,我喜欢变基!!! 因此,对于外行来说,这是您需要重新设置基准的方案: –您是从master分支开始的,但是其他人同时将他们的更改合并到master,因此您需要合并这些更改。 应用更改的最好方法是重新设置基准。 如果将rebase命名为其他名称,例如说“ update”或“ modernize”或“ get-wid-it”,我认为更多的人会发现rebasing很有趣。 首先,在尝试重新设置基准之前,可以通过备份所做的更改使自己省心。 您可以通过以下方式做到这一点: 创建一个临时分支,该分支将冻结您的分支更改,直到重新定基础 复制并保存您已更改的任何文件,或将整个项目本地保存在计算机上 因此,现在,世界就在您的牡蛎上,而您必须彻底出错,才能完全失去所有工作。 因此,这是有关如何重新设置基准的简短教程: 在分支机构的基础项目目录中,在终端中运行: git rebase master -i ←’i’表示交互式,它使您可以管理和修改提交历史记录。 您将在分支上看到提交列表,并且可以选择pick , squash , drop等等。它们中的每一个都是有用的,并且具有不同的用途,但是为了简单起见,在本教程中,我不再赘述。 您可以按原样离开并pick每个提交(或压缩除第一个提交以外的所有提交)。 如果没有合并冲突,您将看到以下消息: Successfully rebased and updated refs/heads/your-branch-name. 但是,您可能会有合并冲突。 同样, merge conflicts是一个令人恐惧的名称-如果将其称为“需要编辑”或“选择武器”或“购物”,它将更容易获得。 因此,这是纠正合并冲突的方法: git status ←这将向您显示哪些文件存在合并冲突 open file-name-that-has-merge-conflict ←然后,在IDE中打开每个文件,然后选择所需的代码(您将在HEAD上看到该版本,并在本地分支上看到该版本)。 git add file-name-that-had-merge-conflict ←添加/保存更改 git rebase –continue ←继续基础 您可能需要重复上述步骤几次(每次正在处理的提交中存在合并冲突时,一次)。 最后,您应该看到令人垂涎的消息: […]

学习Swift和iOS开发第13部分:关于版本控制

想象您正在处理一个个人应用程序项目。 您刚刚击倒了三只红牛,并且感觉(根据字面意思)生产力过高。 您逐行编写代码,开始看起来好像您正在构建的新功能已接近完成。 据您所知,由于缺乏愚蠢的测试,在3,498行附近某个地方创建了一个严重的错误,它将导致您的应用程序出现重大问题。 从那时起,您已经编写了5,000行代码! 当然,您会整夜试图找到该错误的来源。 至少你喝了那些红牛……😳 从不畏惧! 这是版本控制突袭并保存一天的地方。 现在让我们回到故事的开始:假设您正在开发一个个人应用程序项目,并为您的项目设置了版本控制。 您所做的每项重大更改都会推送到远程服务器。 您还要编写另一部分重要代码,并将其也推送到远程服务器。 这将一直持续到您多次推送代码为止。 突然,您在代码中发现一个严重的错误。 不必解析整个代码库,我们可以恢复到代码所处的先前状态。 真好 👌 关于吉特 如果您喜欢视频说明,我们专门为您准备: 在进行版本控制之前,Sam不得不以某种方式将其更新的代码文件发送给Pete。 然后,Pete将不得不识别并复制并粘贴Sam的更改到他的项目中并保存它。 然后,Pete必须将包括他的更改的更新的项目发送回Sam,以便他们俩都可以拥有当前项目: 这种情况仅发生在两个开发人员之间。 想象一下,随着更多的开发人员团队,此问题的复杂性如何增加! 版本控制的工作方式 如前所述,版本控制是一种出色的方式来备份您的代码库,并在需要时能够还原到以前的更改。 这也使与他人的合作更加轻松! 想象一下一个拥有三个开发人员的开发团队,他们分别是Jim,Sam和Harry。 他们都在开发应用程序并实现各种功能。 Jim首先编写一些代码,然后将其保存到他的项目版本中。 山姆也一样,哈利也一样。 现在,它们三个都具有相同应用程序的不同版本: 现在,Jim现在可以将其更改提交(推送)到远程服务器: 完成后,Sam可以访问远程服务器并提取Jim的更改。 版本控制会自动合并Jim对Sam项目的更改: 这两个项目现已合并。 现在,Sam可以将其独特的更改(包括Jim的更改)推回远程服务器,以便其他开发人员可以访问更新的项目: 初级开发人员Harry现在可以将项目下拉至本地计算机,进行更改并添加其功能,然后将其代码推送至远程服务器以将其合并并更新项目: 包起来 当单独工作或与团队一起工作时,版本控制显然非常有用。 它是高效的,有效的,并总体上改善了开发过程。 手动发送,合并和重新发送代码的日子已经一去不复返了。 Git是一个非常有用的学习工具。 在下一篇文章中,我们将学习Git的基础知识。

Octobot的起源

GitHub是世界上最大的软件协作平台之一,拥有超过2500万注册用户。 自2007年成立以来,它已成为全球软件开发人员的重要服务。 尽管git本身是分布式SCM,但是GitHub提出的工具是任何程序员工具集的宝贵补充。 多年来,由于无处不在,它也已成为开源软件的基石。 从开源托管到问题跟踪,构建Wiki甚至访问GitHub Page,很多人都依赖该服务全天候可用。 作为其中的一员,我着手创建一个简单的移动应用程序和服务来密切监视GitHub的状态,并通知我任何更改。 Octobot的概念诞生了。 我的代号为“ Jester”,于2014年底向Louis-Andre Labadie提出了这个想法,他以设计师兼一般网络人员的身份加入了该项目。 他还负责创建Octobot作为吉祥物! 最初的版本放在一起,然后在2015年春季发布。该第一个版本方便地使用Parse.com作为其后端服务。 这不是很理想,但它确实完成了工作,并允许我立即发布Octobot。 在该应用发布前几周,GitHub成为该站点历史上最大的DDoS的目标。 这次不幸的事件在社区造成了很大的混乱。 在GitHub和其他地方学到了教训。 尽管如此,Octobot还是在这里使用户随时了解任何可怕的情况。 去得到Octobot! 它在App Store上免费 。

选择第三方库的简短指南(入门)

开源库对我们开发人员来说是个福音,但这不是什么大新闻。 如果选择得当,它们可以节省我们的时间和精力。 我们不必太在意实现细节,维护和功能。 取而代之的是,我们为我们提供了一个简单易用的API,该API可以使我们轻松地到达所需位置。 我不必自己编写QR码扫描仪,而且我敢肯定,再也不会写网络库了。 但是,在为项目选择库时有许多注意事项。 选择维护不善的设备迟早会适得其反。 现在,假设您要实现一个库,并且发现可以根据需要进行自定义的库。 让我们转到Github并导航到您选择的库。 选择开放源代码库时,需要注意以下几点。 该库是否支持依赖项管理器? 依赖管理器使我们的工作变得更加轻松,我什至不记得编码在他们出现之前是怎样的。 在iO上,我最喜欢的是Cocoapods,但迦太基也获得了极大的关注。 不要忘了苹果自己的Swift Package Manager,这肯定会在不久的将来成为现实。 在这里我不会详细介绍它们的工作原理,但是您应该使用它们,相信我。 它们为您处理了很多难题,例如将依赖项集成到您的应用程序中,使它们易于更新,仅举几例。 因此,请确保支持您选择的依赖项管理器。 什么时候是对该仓库的最后一次提交? 一段时间未更新的回购可能不是您的首选。 通常,超过6个月的提交使我感到怀疑,超过1年或更多年的提交实际上使该回购失去资格。 如今,对于iOS来说,这一点尤为重要,因为Swift的发展非常迅速,并且会定期对API进行重大更改。 可能是该库的维护不完善,您需要根据自己的需要来保持它的最新状态。 最后,您可能会更好地寻找替代方案或自己编写替代方案。 话虽如此:除了主服务器,最好检查仓库中的其他分支。 许多开发人员准备将其库与单独分支上即将推出的SDK版本兼容。 一旦发布了新版本,它们将被合并,并且在此之前可以在您的项目中明确使用。 图书馆有几颗星? 如果回购中有大量的星星(和叉子),则通常可以很好地指示其背后有一个庞大的社区。 很难说出“多少”是多少,但现在我要说大约600+。 让我强调一点,我并不是说星数较少的图书馆可能不是最合适的! 我要说的是,数百颗甚至数千颗恒星几乎可以保证这个lib发挥出色,并且在那里有人在乎。 快速发现错误并通过修复做出贡献的人。 有兴趣在自己的项目中不断更新该库的人们。 因此,根据经验:星星越多,您的决定就越有前瞻性。 图书馆有几期? Github问题追踪器是一件方便的事情。 它使您对所有者和社区对图书馆的贡献有一个很好的了解。 让我们看看Alamofire的问题跟踪器,它是Swift中优雅的网络库。 问题通常以三种形式出现:错误,问题或功能请求。 让我们专注于错误和问题: 有一长串未解决的错误 ,其中一些可以追溯到几个月甚至几年? 查看详细信息视图:这些错误对您来说是否有效? 项目成员有什么回应吗? 如果没有,我将决定不使用该库。 是否有很多问题标记为问题 ? 即使它们似乎是关于非常基本的东西? 这可能暗示此lib没有足够的文档记录或使用起来很复杂。 但是,如果快速而又经常地回答问题,那么在仅解决文档问题就无法解决问题时,也可以寻求帮助。 这也导致了下一个问题: 图书馆是否有充分的文献资料? 自述文件是每个Github存储库的登陆页面,第一印象。 […]

扩展和管理开源社区

我已经为开源iOS社区做出了大约一年的贡献,并参与了诸如MessageKit , Moya , SwifterSwift和IBAnimatable 。 这些项目无疑使我成为了一个更好的iOS开发人员,但是影响最大的项目是Moya,即Moya管理社区的方式。 如果您要构建一个相当大,持久且广泛使用的开源项目,则将需要一些额外的帮助。 与维护实际的代码库相比,通过维护示例文档,管理文档以及响应GitHub问题而积累的工作量可能更耗时。 对于成熟的项目尤其如此,因为代码库的更改频率较低。 我想讨论一下我从Moya中学到的教训,以便围绕一个项目建立一个大型社区,以维护该项目。 有同情心 对开源做出的贡献可能会令人恐惧-特别是对于初次贡献者。 人们常常不愿做出贡献,因为害怕受到批评或看上去无所事事。 不言而喻,您绝不应轻视任何贡献或尝试作出贡献。 您的项目应采用的首批文件之一是行为准则。 Moya遵守《贡献者公约》的行为守则。 如果潜在的贡献者正在努力做出贡献,请采取一切必要的措施来帮助他们完成任务,无论是指导他们完成拉取请求过程还是编写补丁的后备单元测试。 重要的是,每个项目都必须有一份有助于指导的文档,该文档讨论项目的开发过程及其对贡献者的期望。 这样可以确保新的贡献者感到舒适,并使贡献尽可能容易。 您应该总是感到受宠若惊,以至于有人足够关心以帮助您改进项目。 您永远不会知道,将来,该贡献者可能最终为您的项目做出一些最重要的贡献。 提供主人翁意识 绝大多数开放源代码项目都由捐赠时间提供支持。 重要的是,人们在帮助构建的东西上要有主人翁感。 我了解到有几种方法可以做到这一点: 将您的项目托管在组织中。 如果您的项目开始越来越引起社区其他成员的认可,则应高度考虑将所有权移交给组织。 这使您可以在项目周围形成社区,并让其成员在其GitHub个人资料上显示组织徽章。 在第一个合并的合并请求之后邀请用户加入您的项目。 莫亚(Moya)采取了这项政策,并取得了奇迹。 目前,该组织有126个成员,所有成员都对该项目具有写权限。 听起来很疯狂,但是我们锁定了master分支,要求通过状态检查和代码审查。 还没有一个问题。 Moya甚至还开发了一种名为Aeryn的工具来自动执行邀请过程。 您可以在此处查看采用Aeryn的其他组织的列表。 不要使用您自己的名称采用项目前缀。 建立成功的项目是团队的努力。 您应该避免使用引用您自己的名称的项目前缀或采用任何其他种类的个人品牌。 它暗示您是该项目的唯一所有者,并减少了其他贡献者的价值。 就个人而言,我不会使用此命名约定来涉及项目。 通过表彰杰出贡献者为核心团队来奖励他们。 所有贡献者都是宝贵的,但是不认识那些特别致力于维护项目和长期健康的人是错误的。 这可以像在GitHub组织内创建核心团队一样简单,也可以通过在正式文档中收集贡献者的姓名来实现。 尽管每个项目都有不同的要求,但您可以参考Moya如何确定核心团队成员及其职责。 分配责任 根据Ash Furrow的说法:…开源维护者应尽早分配其权力和职责。 因为事实是,最终您将准备好进行下一个项目。 作为维护者的目标实际上应该是创建一个对您的兴趣超过其兴趣的项目。 作为一个控制狂,这对我来说很难。 但是,在开发MessageKit时,我真正地了解了这一点的重要性。 最近,我因积极从事该项目而精疲力尽,以至于我停止了将近一个月的捐助。 在我缺席之前,我已经将制作新版本的权力分配给了前两名贡献者,然后返回发现他们已经修复了多个错误,提供了新功能,甚至发布了重要版本。 视力 […]

可可豆:依赖管理变得更容易

您需要了解的所有有关豆荚的信息。 什么是CocoaPods “ CocoaPods是Swift / Objective-C项目的依赖项管理器。 它具有成千上万的库,可以帮助您优雅地扩展项目。”通过http://cocoapods.org 本质上,它可以帮助您将第三方库,框架整合到您的产品中,而不必担心如何设置它们和配置项目,这有时可能会很麻烦。 为什么要装豆荚? 为什么不Git? •由于库是第三方的,因此每次有新版本时,您都必须下载并将它们复制到您的项目中吗? 可以说,您的项目中有10个库或框架,现在想象一下您将花费多长时间检查其中是否有任何要更新的新版本? 最糟糕的是,如果某些操作不起作用,您需要还原到以前的版本吗? 这确实需要时间,而且很麻烦,使用CocoaPods只需键入pod update并更新具有可用的较新版本的Pod。 •现在是否要使用某个特定库的v1.1? 快速浏览Git提交历史以找出所需的那一个,这有多容易? 使用CocoaPods,您只需说出Pod’AFrameworkLib’,’1.1′ •每个库都需要使用一组特定的配置来设置您的项目,以使其正常工作,并为10个左右的库完成该工作,然后解决冲突本身就是痛苦。 使用CocoaPods,它会自动得到照顾。 •最后但并非最不重要的一点是,您必须包括所有用于向该库的原始开发者提供功劳的第三方库的许可证。 想像一下要复制10个许可文档并确保它们是最新的? CocoaPod在您的项目中自动创建一个确认文件,您可以在其中适当地添加一个确认文件。 通过 http://stackoverflow.com/questions/22261124/what-is-cocoapods 吊舱如何工作? 依赖关系列在pod文件中。 当触发pod update / install命令时,列出的pod被安装,并且CocoaPods创建一个新的项目文件,即.xcworkspace文件,其中列出了所有pod。 这使它更易于使用,但也减少了错误证明。 如何安装吊舱? 吊舱的安装非常简单,这使吊舱如此流行。 您可以通过4个简单的步骤安装Pod。 安装gems:从终端启动[sudo gem install pods] ,将安装gems。 制作pod文件:使用终端在项目目录中创建一个名为Podfile的文本文件,或者使用cocoa pods应用程序并将Pod添加到您的应用程序中。 搜索要添加的广告连播:在cocoapods.org上搜索要添加的广告连播的名称和版本 在Pod文件中添加Pod和版本:您需要提及在刚创建的Pod文件中添加Pod的依赖性。 可以使用任何编辑器完成此操作(最好使用可可豆荚应用程序 单击安装:触发命令[pod install]或单击可可豆荚应用程序中的安装按钮,将安装提到的依赖项。 做完了 刚开始使用可可豆荚而不是xcodeproj文件创建的工作区。 提及的依赖项已添加到您的项目中。 如何删除已安装的吊舱? 早些时候,从Xcode项目中删除已安装的Pod很麻烦。 仅删除pod文件和目录是不够的。 您需要从构建阶段中删除Pod资源,嵌入式Pod框架和其他一些东西。 但是可可豆的应用使这项工作变得非常容易。 […]

我一个月内在Github上获得800颗以上星星的方法

本文是根据我发布iOS开源库Sharaku的经验编写的。 这个图书馆一个月内获得了800颗以上的星标。 我没想到这会成为如此受欢迎的项目。 我的期望是在6个月内获得50颗星。starting开始之前,我想确保这就是我在这次体验中的感受,这就是有关轻量级图书馆的故事。 这是我所做的一些步骤。 1.提出想法 首先,我们需要对将作为开放源代码创建一个想法。 我想我们想使图书馆受欢迎。 我们应该提出什么样的想法? 我想我需要在开始编程之前问一些问题。 完成需要多长时间? 我想您有自己的工作,并且不能花这么长时间来从事开源项目。 如果答案不够短。 简化想法可能更好。 对我来说,我可以花的时间只有1或2天。 它有其独特的价值吗? 没有自己价值的图书馆将不会流行。 因此,您需要考虑其他类似库之间的区别。 这就像在思考商业模式。 如果您认为自己的想法满足上述条件,那就开始编程吧! 2.程式设计 对于Sharaku这样的库,简单性很重要。 使用Sharaku,您可以将功能与如下几行代码结合使用。 让vc = SHViewController(image:imageToBeFiltered) vc.delegate =自我 self.present(vc,动画:true,完成:无) 由于我使用了CocoaPods模板,因此它为我提供了直接的文件结构。 这将有助于其他开发人员的维护或贡献。 3.释放 今天,为开发人员共享源代码的唯一方法是Github。 我认为以下两点对于这一步骤很重要。 设计 对于某些开发人员来说,他们不是擅长使用Adobe Illustrator或Sketch.app进行设计。 但是设计对于在Github上吸引明星非常重要,因为共享和传播您的图书馆的人将使用粘贴在Github上的图像或视频。 因此,您需要仔细制作它们。 自述文件 即使您的设计很棒并且库本身很棒,但是如果存储库的README质量很差,人们如何依赖您的库并使用它。 自述文件应涵盖开源库的最低要求。 用法 示例(屏幕截图或视频) 依赖关系和要求 如何安装 执照 4.传播 首先,我使用Facebook和Twitter,因为我的许多朋友都是开发人员。 其次,列出库的Web服务。 就我而言,这是可可粉控件或iOS Cookies。 最后一个Github存储库正在收集有前途的开源库。 在我的情况下,Sharaku被列为超赞。 通过上述渠道在Github上获得超过20或30颗星之后。 […]