Tag: 移动应用程序开发

Cordova-plugin-cocoapods-support的Cordova编译问题修补程序

cordova-plugin-cocoapods-support是一个Cordova / PhoneGap插件,它允许您在XML文件中为iOS定义插件或项目CocoaPods依赖项。 但是,当与cordova-ios@4.5.2或更高版本一起使用时,Cordova编译命令将失败。 本文将指出导致此问题的更改以及使iOS构建再次通过的潜在解决方案。 当Cordova发布cordova-ios@4.5.2时,引入了新变量location ,其中包含了必要的信息,以供平台构建器获取捆绑包标识符。 新变量的属性之一是pbxproj文件的路径。 该文件位于xcodeproj目录中。 在Cordova准备项目之后,将执行cordova-plugin-cocoapods-support插件的after_prepare挂钩脚本,并对平台构建脚本进行修改。 执行的修改之一是非常松散的查找,并将xcodeproj所有实例替换为xcworkspace 。 由于意外更改,生成器在尝试从xcworkspace目录解析pbxproj文件时失败,因为找不到文件。 该问题只能通过cordova compile命令看到,而不能通过cordova build命令看到。 这是因为build命令执行所有构建步骤,并从缓存中维护包标识符信息,并且不需要解析pbxproj文件。 此解决方案无需多说。 如果您是插件开发人员,并且有可能,那么删除插件依赖项并将Cordova的本机实现用于CocoaPods支持将是理想的选择。 这是有关如何使用Cordova的实现加载OpenSSL Pod文件的示例。 <framework src=" OpenSSL ” type=” podspec ” spec=” 1.0.210 ” /> 您可以在此处找到更多详细信息。 如果您不是插件开发人员,并且不能删除插件依赖项,则可以创建自己的挂钩脚本来还原重大更改。 首先,我们将需要创建钩子脚本,最后将其添加到项目的config.xml中,以便使用它。 创建脚本 让我们创建一个名为beforeCompileCocoapodsHotfix.js的新文件,并将其添加到hooks文件夹中。 路径应类似于以下/hooks/beforeCompileCocoapodsHotfix.js 。 接下来,我们将添加脚本内容。 该脚本将仅显式搜索重大更改并还原。 这不会还原插件的所有更改。 最后,我们将向项目的config.xml添加对新钩子脚本的引用,以在编译前执行。 由于这是一个iOS依赖项,因此我们将其添加到iOS平台声明中。 <platform name =“ ios ”> <hook type =“ before_compile ” src […]

10种出色的移动开发影响力

紧跟行业中的最新新闻和发现,尤其是在技术行业,考虑到一切发展和变化如此之快,保持最新状态非常重要。 做到这一点的简便方法是跟随一些影响者。 实际上,它可以帮助您了解最新趋势和最新技术。 在这篇文章中,我们列出了2016年杰出的移动开发影响者名单,所有移动开发者都应该了解并明显遵循。 正如我提到的,我们周围的一切都在不断变化。 特别适合开发人员。 因此,可以,跟随移动影响者可以帮助您获得有关趋势的提示,新闻,建议和知识。 但是知道要跟随谁也很耗时,因此您必须进行更多的研究。 我不会说谎,有数百人非常有趣,但是密切关注所有人并不现实。 以下列表与世界上最好的移动开发影响者无关,它是我们在Apiumhub上关注的影响者列表,我们认为这是惊人的裂缝! 2016年我们的十大移动开发影响力 杰森·克宁 博客 Github Jason是一位自由移动应用程序开发人员,具有在ASP和.NET方面的经验,为iPhone,iOs,iPad和Android构建移动应用程序。 他目前正在为诸如Appcelerator,CareMEDS,EMC,Six Pack Productions,Clarityn,ITV,YouGov,Getum,ACE Insurance,Hotskoop,SportsBlog,Kloc,GemsAtWork,Three.co.uk,UKTV,Mosaique等公司开发Titanium本地应用程序Jason为开源项目做出了贡献,并为Titanium Mobile编写了自己的模块,小部件和应用程序。 除编码外,他还经常与公司一起担任开发主管,架构师和导师。 在他的博客BouncingFish上,您可以为开发人员找到很好的建议。 KIN LANE 博客 Github Kin Lane拥有20多年的程序员,数据库管理员,架构师,产品开发人员,经理和执行人员的经验。 他的目标是帮助理解API的价值和潜力,因此决定专注于API传播者。 鲍里斯·伯格 博客 Github 鲍里斯(Boris)是一位注重用户体验的软件开发人员,他喜欢为Apple设备构建程序。 他专门研究移动应用程序,分布式计算,代码生成,编程语言和网络编程的耦合。 Boris是CocoaPods核心团队的成员,多年来,他编写了各种Xcode插件并为开源项目做出了贡献。 他构建了很多东西,其中包括iOS SDK和我们在Contentful的Discovery应用程序,Contentful是一个针对Web应用程序,移动应用程序和连接的设备的内容管理平台。 凯尔·富勒 博客 Github Kyle Fuller是专注于移动体验的软件和移动应用程序开发人员。 一段时间以来,他一直在设计应用程序(主要是iPhone和iPad)和开发人员工具,并且在许多开源社区中非常活跃。 此外,他还开发了诸如Palaver之类的应用程序,并实际上在Cocode工作。 YA中NO 博客 Github Ayaka自iOS 4以来一直从事iOS开发,她只喜欢编写Swift,如果您想阅读更多,我建议阅读她的博客。 她非常活跃,并进行了很多演讲,例如在CMD + U会议,iOSCon和try! 斯威夫特(及其他许多人)。 基思·史密利 博客 […]

为什么您的企业需要自定义移动应用程序开发?

我们生活在一个时代,在这里不乏各种商用软件。 轻松访问各种类型的程序有时可能使我们感到不需要自定义设计的软件。 但是,我们遇到了许多情况,只有声誉卓著的澳大利亚移动应用开发公司提供的定制软件解决方案是唯一的选择。 这样做的原因是每个组织都有一组独特的要求,这些要求只能通过定制的解决方案来满足。 在此博客中,我们整理了一些理由来强调对定制软件的需求,以及澳大利亚可靠的移动应用开发公司如何在此方面使您受益。 缺乏品牌定制体验 当前,要想获得更大的成功,您需要与商业竞争对手区分开。 这就是商业组织投入更多精力以拥有独特品牌标识的确切原因。 所有具有强大品牌的知名品牌都倾向于不仅在其网站上而且在其销售点设备等上展示其商标徽标。 众所周知,定制软件解决方案可以为客户提供独特的体验,因此传统机构更可能采用它们来带动他们带来的价值。要意识到的一个事实是,在线零售商也从定制软件中受益。 例如,可以开发自定义移动应用程序,从而比Web浏览器更好地简化帐户管理和购买流程等。 关键业务数据缺乏可见性 我们经常忘记的一件事是数据的重要性。 数据被认为是任何组织中最重要的资产,这就是为什么您需要最大程度地利用数据的原因。 如果您无法证明正在生成的大量数据的合理性,那么您肯定会错失许多生产机会。 如果您通过利用来自销售,采购或市场部门等不同程序的数据来优化业务实践,则意味着您可以将业务转变为运转良好的机器。 它还可以让您超越市场竞争对手,也可以利用自己的利润。 数字数据面临的挑战是,有多种来源可以生成数据。 如果要跟踪网站的性能,可以转到Google Analytics(分析)。 但是,如果要跟踪诸如客户反馈,社交媒体上的响应等内容,您将需要其他解决方案。 仅当您拥有来自澳大利亚可靠的移动应用程序开发公司的定制移动应用程序时,才能跟踪所有这些信息。

跋涉马拉松追踪器:原始版本

我设法学习了足够的python来编写脚本,该脚本可以从我们一直使用的网站上抓取所有剧集和电影信息,并将其转换为可以在iOS应用中使用的格式。 通过airdate进行排序非常容易,因为它已经按照正确的顺序进行了排序,所以我又一次保存了stardate进行排序的时间,那时sort函数看起来似乎不太吓人。 最初,该应用仅支持iPhone,并且仅使用最基本的UI元素。 该复选框取自Apple制造的示例项目。 它足以满足我们的需求。 我将永远不会忘记我第一次在设备上构建这种纯粹的兴高采烈的感觉。 在使用该应用程序时,我设法获得了无偿的实习机会,并且在办公室工作,支付Apple Developer许可证费用以及手持手机运行自己的应用程序之间,我终于感到自己像一个真正的iOS开发人员! 下一步是使UI更具“星际迷航”的感觉。 我知道我想要一个看起来像LCARS的东西,所以我们试图找到尽可能多的关于Michael Okuda设计的信息。 我们使用了演出和粉丝娱乐中的屏幕截图来构建设计灵感文档。 然后,我们尝试提取元素以构建自己的UI。 但是,我们发现尝试紧密匹配设计并没有带来最用户友好的界面。 对于更大的触摸区域以及在屏幕上获取尽可能多的信息的需求,驱使我们经历了多次迭代,直到我们确定自己喜欢的东西为止。

担任iOS工程师30个月。 给新人的提示。

30个月 7个应用 2个大应用 兼职自由职业者 全职iOS工程师 长期玩家 这是我给新手的iOS开发提示。 以斯威夫特 Swift vs Obj-C我应该首先学习哪个? 我的答案直接针对Swift。 使用Swift学习,播放和开始新项目。 除非您有理由使用Obj-C。 例如,维护旧应用程序。 警告-不打算在Obj-C中启动您的项目,以后再迁移到Swift。 迁移比您想象的要难。 知道生态系统 什么是流行的JSON库? 我的应用程序应使用哪个云数据库? 目前发生了什么事? 您应该了解应用程序的工具/库/框架/堆栈。 不要成为一个孤独的程序员,自己编写一切。 有人已经贡献了这些作品,使您的生活更轻松。 选择并使用它们可以提高生产率。 对于开源库。 搜索` awesome-xxx`。 例如,` awesome-swift` ,` awesome-ios` 。 使它工作,使其正确,使其快速 我一直相信这个概念。 软件开发不是一次性的工作。 好的软件是经过多次迭代制作而成的。 当您第一次做某事时,可能并不如您所想的那样好。 但是,请放心,花些时间重新访问它,并使它变得更好。 只要记住你在做什么。 经验会为您提供帮助。 下一次转到最后一步比您想象的要容易。 学习建筑 看看其他成功的应用程序。 看看它们是如何制成的。 不仅是应用程序方面,还是整个系统。 建筑角度将提高您的工艺水平。 有很多开源的iOS应用。 电报,Firefox,维基百科,WordPress,VLC,电线。 github / open-source-ios-apps是一个很好的资源。 实验 开发应用程序时。 您可能会想出很多主意。 […]

移动创业公司:第3集-新的放松应用程序进入了一个人满为患的空间。

我刚刚发布了“ Relax Utopia”:一种用于放松,瑜伽和冥想的新iOS应用,其中包含风景摄影,音乐和自然声音。 没有广告,也没有购买。 您可以在此处获取该应用程序:https://itunes.apple.com/us/app/relax-utopia-sleepy-sound-gallery/id1223240574?mt=8 该计划是:吸引尽可能多的用户,并获得解决非常普遍的消费者问题的核心要素。 我还相信,尽管其他所有竞争对手都在为每个人购买应用程序内的商品而疯狂,但我可以找到一种更好的方法,在整个周期的后期将整个交易货币化。 这个应用程式将长期免费。 最重要的是:此应用是在可重用的通用平台上制作的,可用于将来快速制作类似的应用。 当前,瓶颈是目前的营销和分销。 我将主要寻找针对大多数人最想要的定制方法。 请享用! 从iTunes描述: 这个程序是iPad或iPhone的终极自然放松体验。 郁郁葱葱,浑然一体的优美风景和冷峻的声音充满您的感官。 一切都会自动发生。 只是躺下,放松,打ze睡,或者干脆把它放在桌上,迷失在乌托邦中。 使用它进行瑜伽锻炼或冥想,下班后放松,入睡或作为动画相框。 限时免费。 在您用餐时获取它。 没有烦人的广告! 没有购买! 请告诉您的朋友,并告诉我您对应用程序的看法:RelaxUtopiaApp@gmail.com 特征: –“亮度”滑块可让您降低图像的亮度和蓝色,以帮助您更轻松地入睡。 –超过30种令人放松的高品质声音。 –超过300张自然图像淡入了一张无缝幻灯片。 –弗雷德里克·肖邦(Frederic Chopin)创作的5首古典钢琴杰作。 –将任何图像保存到您的媒体库。 –将任何图像分享到Facebook。 –自动模式—缓慢滚动图像幻灯片。 图像以一种连续流的方式彼此淡入。 –动画模式-分别为每个单独的图像设置动画 –所有声音模式-一次播放2种随机声音效果,直到被取消。 –折叠并淡出所有按钮,因此仅保留自然。 –与声音效果分开控制音乐音量。 –横向或纵向模式。

Swift中的闭包:续集

自从我开始学习Swift闭包以来,我发现自己实际上正在寻找它们,并尝试将它们更频繁地注入我的作品中。 我本着同样的精神涉足函数式编程 不可避免地 高阶函数 。 函数式编程已成为更高级的编程方法之一,它已成为摆在桌面上的一席之地。 但是,这与功能编程无关。 这是关于我对闭包的学习; 它们如何在高阶函数中使用,以及扩展后,它们在函数编程中的作用。 如果您尚未探索函数式编程,建议您这样做。 将您的🐽放到那里,看看是否喜欢它。 你知道他们在说什么,没有有害的知识。 本文主要借鉴了Ray Wanderlich的本教程,主要是因为我发现它很好地解释了并且阅读起来很有趣。 Ray Wanderlich的教程难道不是很棒吗? 🙌 要继续学习本章,您需要基本的闭包知识。 不是你的茶吗? 不用担心,当我的学习也不是我在这里喝茶的时候,我就写下自己的学习内容。 在进行函数编程之前,让我们回到舒适的区域。 这是我们最常使用的东西。 您有一个列表,想要遍历该列表并执行某些操作。 您将做什么,请召唤for循环! 这就是所谓的命令式编程 。 这看起来很整洁,您了解它并且很容易编写。 那么,为什么要解决未损坏的问题呢? 这就是为什么! 释放🐉,我的意思是声明性的! 上面的示例实际上只是一行代码,它很简洁,即使现在看起来不太像,但编写起来却容易得多。 这些只是我们看到的一些优势,我们将在进行过程中探讨其他更大的优势。 我有你的兴趣吗? 现在我们可以尝试定义什么是功能编程。 函数式编程是谁? 函数式编程是专注于数学计算并避免状态和可变数据的范例。 一旦避免了状态数据和可变数据,我们将转向高阶函数来填补空白。 与定义高阶函数一样,这似乎是一个好时机。 高阶函数 高阶函数是接受其他函数作为参数,可以返回一个函数或同时返回两者的函数。 当我们在这里探索闭包时,我们提到闭包被称为高阶函数functions。 上面有一个小问题,我们将使用它来查看几个高阶函数。 这是一个书店模型。 有各种组成部分的书籍和书籍清单。 地图 这是一个闭包 , 接受一个函数作为其参数,并在将函数应用于数组中的每个元素后返回 长度相同 的数组 。 问题1 我们希望在我们的小书店中获得所有书名的列表。 我们该怎么做呢? 势在必行? […]

让我们停止对ViewController长度的教条

你好 我叫Ted Bendixson,我创建了其中包含200多行代码的View Controller。 我试图掩饰多年的耻辱。 你知道是怎么回事。 您参加一个聚会,发现自己与朋友和同事随意地开玩笑。 然后,您甚至没有考虑,就不小心提到了UserProfilesTableViewController的第203行。 面孔变白。 有人将酒倒入抛光的硬木地板上。 使用MVC和MVVM,您绝不应该有任何具有超过200行代码的视图控制器,对吗? 如果您使用反应性可可,则可以将这些视图控制器的尺寸缩小到更荒谬的尺寸。 那我为什么敢这样做呢? 我迷失了方向吗? 如果您像我一样,那家伙写的那个项目就遭到了一个人的折磨,后者大声地反对在多个ViewController之间传递数据的需要。 您清理了他的烂摊子,发誓永远不要让这种情况再次发生。 但是也许您对清除过去的热情太过热情了。 您的Tiny ViewController Obsession是否提高了您的生产率,还是有碍于提高生产率? 视图控制器存在的原因 在尝试回答此问题之前,我们应该首先了解ViewController试图解决的问题。 为什么我们应该首先使用具有多个视图控制器的应用程序? 通过采用这种方法,我们可以获得什么? 我曾经认识一个初级开发人员。 他不了解在控制器之间传递数据的概念。 他认为UIKit是对开发人员的一种强加手段,迫使我们创建所有这些复杂的体系结构只是为了在屏幕之间共享数据。 他更喜欢将所有代码放在一个ViewController中,因为它更易于理解。 你不能把这些东西编起来。 他只有一个ViewController拥有许多生产应用程序。 所有的UI都是用代码完成的。 要转到其他屏幕,他必须为屏幕上的一个视图设置动画,并用另一个视图替换。 在任何给定时刻,屏幕左侧或右侧都有数十个视图。 他还使用了Interface Builder,这令人困惑,因为您永远无法在他的一个ViewController中找到任何UI元素。 这是一大堆视图,按钮,表格视图和选择器,它们彼此堆叠在一起-IBOutlets相互连接在一起。 最终,他看到了光,并学会了顺其自然。 他开始使用 UIKit,而不是反对。 使用UIKit的好处 苹果公司希望我们在我们的应用程序中使用多个ViewController子类,因为这是获得UIKit原生风格的最简单方法。 如果愿意,您始终可以决定选择流氓,但您的流氓行为会付出一定的代价。 如果您决定不在您的应用程序中创建多个视图控制器,则必须开始实现UIKit免费提供的默认行为和动画。 那要花很多时间。 您也可以将初始估计值乘以10。 我们与该原生外观相关联的许多东西都直接来自UIKit。 从一个屏幕到另一个屏幕的动画,表视图,选择器,随着键盘进入屏幕而向上移动的文本字段; 全部都是UIKit。 因此,拥有ViewController这些东西的真正原因是因为我们想与UIKit一起玩得很好。 当我们与UIKit玩得很好时,我们将免费获得所有这些本机外观的行为。 换句话说,我们可以在一个月内完成一个项目,而不是十个月。 对ViewController长度有什么影响? 没有,这就是我的意思。 我们所知道的是,每个屏幕内容都需要有自己的ViewController。 没有ViewController的上帝会下雨EXC_BAD_ACCESS因为未能使该控制器低于200行而崩溃。 […]

Swift 4中的属性观察器didSet和willSet

在本文中,我们将研究快速的属性观察器。 根据Apple的文档: 财产观察员观察并响应财产价值的变化。 每次设置属性值时都会调用属性观察器,即使新值与属性的当前值相同也是如此 。 让我们看一下下面的代码片段,以帮助我们更好地了解属性观察者willSet和didSet的工作方式。 从上面的屏幕截图可以看出,在设置person属性之前,将首先调用willSet中的代码。 在设置person属性后, didSet将立即被调用。 这就是为什么我们可以访问didSet中的person属性, 而这在willSet中是不可能的。 同样从代码中,您可以看到我在willSet观察器中使用了自定义参数名称。 您可以随意使用自己的自定义参数名称覆盖默认参数名称。 关于属性观察器的另一件事要注意的是:不能在惰性变量上使用属性观察器,因为只有在程序中调用了惰性变量后 , 惰性变量才能正确初始化并分配给内存。 示例如下所示: 惰性变量名称=“约翰” print(“我的名字是\(名字)”) 仅在上面的print语句中调用了变量名后,该变量名才会得到正确的初始化和分配的内存。 这违反了属性观察者的目的,因为具有观察者的属性需要具有初始值 。 每当属性值更改时,这将使它能够跟踪更改。 当您必须跟踪属性以确定值何时更改以执行某些逻辑时,就需要属性观察器 。 因此,您可以将其抽象为willSet和,而不是使用某些函数来检查属性的值以执行某些操作。 当值设置为所需值时,让它执行逻辑。 相信阅读完本文后,您现在对Swift中的属性观察器如何工作有了更好的了解。 感谢您的阅读,并随时在下面提出任何意见或问题,我将为他们解答。

如何:创建一个UIPageViewController

创建UIPageViewController的步骤—代码行= 60 故事板 将UIPageViewController拖到情节提要上。 将所需的页面数的View Controller拖动到情节提要上 为情节提要ID和恢复ID设置名称 码 4.创建UIPageViewController类,并继承UIPageViewController,UIPageViewControllerDatasource和UIPageViewControllerDelegate 5.添加数据源所需的方法 故事板 6.在情节提要中将UIPageViewController设置为其自定义类名称,即您刚刚在代码中创建的名称 设置过程完成。 现在介绍实现UIPageViewController的功能的实现。 码 设置数据源和UIPageViewController的委托 创建一个函数以检索视图控制器(应用程序的页面) 创建一个延迟实例化的数组:通过调用我们刚创建的函数来填充每个索引 在viewDidLoad中:从数组的第一个索引设置UIPageViewController的第一个视图控制器。 数据源方法 5.在viewControllerBefore中: 检查条件 如果在上一个索引处有一个视图控制器,那么您可以向后滚动 如果页面数量大于“ 0”,那么如果不是,则可以从0索引滚动到最后一页 如果先前的计数以某种方式超出了pages.count的范围,则返回nil,这样应用程序不会崩溃。 从数组索引返回ViewController 6.在viewControllerAfter; 逻辑与inViewControllerBefore相同,但滚动方向相反 可选:将滑动类型从页面卷曲(如大多数电子书)更改为滚动(如大多数应用程序)。 可以在UIPageViewController的情节提要属性检查器中完成此操作 UIPageViewController实现