将iPhone / iOS HEIC转换为JPG图像

在iOS 11或更高版本中,提出了一种称为HEIC的新图像格式。 我们中的许多人都无法打开这些映像,尤其是在Windows操作系统中。 但是您可以将那些HEIC格式的图像转换为JPG。 怎么样 ? 让我们来看看… 我们将使用imaize提供的软件。 我下面有一个有关此的视频教程。 或者您可以在该视频之后看一下基于文本的教程。 现在,将您的HEIC图像拖放到其上。 完成后,您将获得一些选项,如下面的红色标记所示。 设置您浪费的输出格式,可以是JPEG或PNG以及质量。 现在该单击转换按钮了。 这次,它将要求您选择要获取转换文件的输出文件夹。 完成后,您将收到“转换成功”消息。 简单的步骤,尽享乐趣🙂如果您正在寻找在线照片编辑器,请查看有关在线照片编辑器的文章。

街头足球与Spirit缔结正式的技术合作伙伴关系

借助Spirit的Web服务和Apple iOS上易于使用的移动应用程序,《街头足球》可以提供更直观的日历设置,以使支持者和球员随时了解组织的各种活动和计划。 总部位于Alpharetta的Spirit公司在与当地学校系统配合使用时对软件和应用程序进行了微调,从而使新的合作伙伴关系完美地满足了街头足球的需求。 “ Spirit将我们与潜在的志愿者,运动员和其他参与者联系起来的能力使我们的数字业务更上一层楼,” Streets in Streets首席执行官吉尔·罗宾斯(Jill Robbins)说。 “在方程式中加入Spirit的亚特兰大地区根源和教育背景后,这种伙伴关系对发展我们的社区更具吸引力。” Spirit的iOS商店可在iTunes App Store中下载,您可以在该组织的官方网站上的Streets日历中找到新的Soccer。 使用Spirit的应用程序,参与者可以检查事件的地点,赚取积分和参加的奖励,并可以直接与“街头足球”和组织中的其他人员进行交流。 桌面操作系统和iOS应用程序上的定向通知会在与用户相关时向用户显示他们需要知道的确切信息。 赛事参与者可以赚取出席积分,并在社交媒体上向朋友和家人介绍他们支持亚特兰大青少年足球拓展的经验。 Spirit已在soccerstreets.org的Streets日历中心中对足球进行了改进,并随着ATL冠军联赛之路的日程安排以及该组织繁忙的春季足球季中的其他活动进行了更新。 诸如即将在4月30日在Meehan’s Downtown举行的FIFA ’16游戏锦标赛,Steel Canyon高尔夫俱乐部的Foot Golf以及我们的屋顶开球派对等活动都将在锦标赛的构建过程中出现在应用程序上。 有关Streets最新官方合作伙伴中Soccer的更多信息,请访问www.spiritapp.co或访问App Store进行快速预览。 关于街头足球 25年前,《街头足球》向城市社区服务欠缺的孩子们介绍了足球。 通过这项运动,我们为全美超过100,000名年轻人灌输了健康的生活方式和积极的选择。 在接下来的25年中,通过角色发展,指导和就业计划,《街头足球》将确保所有孩子都有机会在场上和场外获得成功。

使用Django rest框架开发iOS客户端应用

在过去的几年中,我一直在使用Parse作为我的应用程序的后端。 但是,这并没有给我真正的自下而上的感觉。 两年前,我开始使用Django(高级Python Web框架),但由于它的难度和完整性(学习基础知识的机会较少),我经常对此失去兴趣。 但是,在尝试了其他流行的后端语言(例如PHP和NodeJS)之后,我决定坚持使用Django一段时间。 Django的主要功能是其管理界面,该界面可帮助开发人员尽快编写应用程序! 一年多来,我用它来制作几个个人项目站点,包括我的投资组合。 由于我在应用开发方面(iOS和android)的丰富背景,我想通过使用Django后端开发客户端应用来挑战自己。 因此,我在今年初启动了一个小项目来学习。 在本文中,我将解释如何设置Django rest框架并为iOS客户端应用提供rest api端点。 Django Restframework是现代的Web Api套件,支持Python(2.7〜3.5)和Django(1.7〜1.9)。 对于searchrestaurant应用,我的目标是最初提供以下端点。 为此,我使用了Google Maps Geocoding来获取搜索地点的纬度和经度,并使用Foursquare API来获取相应地点的餐厅(比萨饼,咖啡等)。 使用Django restframework创建REST API的第一步是声明模型的序列化器类。 序列化器和反序列化器的目的是以json的形式获取检索/发送数据。 我在应用目录搜索下的文件serializers.py中创建了RestaurantSerializer。 下一步使用此序列化程序并在api端点被命中时提供json数据。 所有api端点均由views.py中的RestaurantList类使用urls.py中的url(r’^ api / v1 / $’,views.RestaurantList.as_view())处理 首先,解析get请求以获取诸如location和rtype(餐厅类型)之类的参数,然后查询现有数据库。 如果不存在数据,则同时使用Google API和Foursquare API生成一组新的查询。 Foursquare返回的数据将保存在数据库中,并使用serializers类返回到api端点。 提供的代码段如下。 典型的请求和响应对象如下所示。 要求: https://searchrestaurant.pythonanywhere.com/api/v1/?format=json&location=oslo&rtype=pizza 回应: 请注意,我们得到JSON Array作为响应。 如果找不到数据,我们将收到以下JSON对象的响应 {“错误”:“未找到”,“状态”:“ 404”}

Xcode 9中的VIPER项目模板:当模块模板不够用时…

如今,iOS的要求非常困难(相对于时间)。 这些天的要求就像“我想要像托尼·史塔克(Tony Stark)的钢铁侠西装那样的东西”。但这不是难题。 问题出现了,当在下一行中听到“您有3个星期”,然后您会突然感到吐出这三个神奇的单词的冲动,可惜……..u不能……😕 就像您知道自己可以做到,但另一方面,您对自己的能力提出了质疑……“我能在DEADLINE内完成它吗?” 在满足这些要求时,大多数开发人员更喜欢从头开始工作,他们可以轻松地制定自己的工作策略。 但是,老实说,我们是否有足够的时间……从头开始。 最近,我正在使用新架构VIPER。 在研究了这种面向协议的体系结构之后,我意识到您必须有足够的时间来使用它,因为与MVC相比,几乎必须编写三倍的代码。😟 Xcode Project模板提供的内容是您必须播放的文件的最小限度基本展示。 但是,在进行大型项目时,您需要具有一个良好的结构,其中将包含Enums,Extensions,Constants,Storyboards,Feature Modules等文件。随着您深入了解需求,这种结构会不断发展。 因此,我想到了拥有一个项目模板,该模板将包含一个基本结构以及一些基本模块,例如登录,侧边菜单,仪表板,注销等。至少可以节省两到三天的初始工作时间…😁😁 对于创建项目模板,我想您首先需要了解的是项目模板的外观。 为此,请转到位置/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/developer/Library/Xcode/Templates/Project\ Templates/iOS/Application 在此位置,您可以找到许多扩展名为.xctemplate文件夹。 复制文件夹Single View App.xctemplate并将其粘贴到桌面上,然后再开始浏览其内容,因为您不想弄乱Xcode的默认模板。 首先,将文件夹名称从Single View App.xctemplate更改为Viper Project Template.xctemplate 。 但是更改文件夹名称并不能解决所有问题,而有关TemplateInfo.plist文件的所有操作都位于您必须使用的文件夹下。 打开TemplateInfo.plist 。 现在,像Xcode项目一样,项目模板也具有使它唯一的Identifier 。 对于单一视图应用程序,您可以看到com.apple.dt.unit.singleViewApplication 。 您可以将其更改为任何其他值,例如我使用的“ com.manishKumar.singleViewApplication”。 现在,只需保存TemplateInfo.plist文件,然后复制文件夹Viper Project Template.xctemplate并将其粘贴到复制Single View App.xctemplate 。 退出Xcode,然后重新启动。 现在,当您创建一个新项目时,将有一个类似的选项。 Yippee …😃😃您已经创建了自己的项目模板😎。 但是还没有结束。 根据VIPER结构,我们仍然没有任何内容。 我们现在需要对此进行努力…… 再次打开TemplateInfo.plist (保留在桌面上)。 在该文件中,在Options选项下浏览。 您可以在“ Units下看到两个选项 目标C […]

NatCam教程系列1:开始

NatCam于2015年秋天启动。我当时在一家需要在Unity中扫描条形码的初创公司工作。 当时没有解决方案,而最接近的( WebCamTexture )根本不能令人满意。 因此,我决定创建一个API来完成我们需要的API。 一年半过去了,我们来了! 那么NatCam的作用是什么? 很高兴你问。 以下是(非详尽的)列表: 流体相机预览,与WebCamTexture 高分辨率预览(在某些设备上为1920×1080或更高) 自定义分辨率预览,根据需要高低 照片拍摄。 拍摄8MP,12MP或更高的高分辨率照片 闪。 拍摄照片时,设置闪光模式 对焦和自动对焦 曝光控制。 使场景变亮或变暗 相机光学变焦 火炬。 无论是否正在运行摄像头预览,请戴上手电筒 VR支持,适用于我们所有的Cardboard和GearVR爱好者 预览数据。 在流式传输预览数据时对其进行访问

蓝光音乐– BEL –不再哭泣–蓝光音乐–中

蓝光音乐— BEL —不再哭泣 带有嘻哈风味的交叉根单曲 在所有主要的在线零售商处都有 https://smarturl.it/Bel-NoMoreCrying 蓝焰音乐官方网站 http://blu-flamemusic.weebly.com

快速了解UITableViewCell可重用性

总览 表格视图在单个列中显示项目列表。 UITableView是UIScrollView的子类,尽管UITableView仅允许垂直滚动,但它允许用户滚动表。 组成表格中各个项目的单元格是UITableViewCell对象; UITableView使用这些对象绘制表的可见行。 Tableview不会在每次调用行单元格时都初始化单元格,它会重用 em。 明显!! every‍♂️每个人都知道,但问题是“ 如何?” ”。 诸如TableView之类的Apple API使用称为“ 对象池 ”的东西来进行管理。 对象池 对象池是一种设计模式,它可以重复使用🔄一组预初始化的对象,或者可以说它维护了实际需要的对象池,然后又一次又一次地重复使用它。 Tableview充当池的客户端,当它请求对象时,池将从池中返回一个实际项目,该项目可重复使用,而不是每次都初始化一个新对象。 当客户端完成对象处理后,该对象将返回到池中以供重用。 对象池用于提高性能,因为没有创建或销毁对象,而是将它们从池中抽出并在使用后返回给对象,从而节省了更多时间和内存复杂性。 在TableView的情况下很容易理解。 创建单元时,它是从池中提取的,在完成其工作时,或者万一可以说,在TableView中完成显示将返回到池中。 对象池的实现: 让我们尝试为自己创建对象池。 让我们创建一个可用于约束通用池项的协议。 协议可重复使用{ 函数重用() } 我们可以在协议中添加重用函数,在该协议中,当元素从池中重用时,我们可以重置视图以重用它,并重设视图(​​reuse)。 类ResuableCell:UITableViewCell,可重用{ 函数重用(){…} } 现在我们可以建立对象池了。 Pool { 私有let maxElement:Int 私人让生产者:()-> T public init(maxElementCount:Int,producer:@escaping()-> T){ 自我生产者=工厂 self.maxElement = maxElementCount } } maxElement是我们要在池中进行初始化的元素的最大数量,就像我们在TableView中具有numberOfRows或numberOfSections一样。 生产者函数需要告诉我们如何制作通用元素 我们需要再添加两个绘制和释放功能,例如在TableView中,该单元格在屏幕上显示后将被释放。 Pool { 私有let maxElement:Int […]

从行程到小部件

Skyscanner应用程序动态结果页面的故事 由Zsombor Fuszenecker 到目前为止的故事… 在Skyscanner,我们会不断地在我们的应用程序上进行迭代,以帮助旅行者找到适合您旅行的最佳航班,酒店或租车服务。 毫不奇怪,搜索结果页面是应用程序最重要的部分之一。 这是我们的用户将大部分时间用于比较结果和更改搜索参数的地方。 最初,航班搜索结果页面仅用于显示航班行程。 但是,在发布具有以下结果列表的新版本的应用程序后,我们意识到可以改进来自同一提供商的具有多个选项的路由。 请注意,上面的结果非常相似(相同的承运人,价格相差不大,飞行时间略有不同),并且像这样的列表在小屏幕上显示有大量物品并不容易浏览。 我们的目的是使比较变得简单,因此我们最近修改了此页面的外观,以确保比较飞行选项在尽可能小的屏幕上进行浏览。 我们迅速从了解问题转向研究可行的解决方案,然后迭代许多原型。 最后,我们认为我们找到了最佳解决方案:我们没有显示具有很多直航的航线的几乎相同的航班列表,而是按航空公司对列表进行了分组。 通过这样的概述,可以很容易地比较直接承运人及其价格。 我们称这个额外的内容为小部件 。 随着时间的流逝,我们想要添加到结果列表中的事物数量越来越多。 警告消息,推荐小部件和赞助广告只是结果列表中许多其他项目的一部分。 每次我们添加新类型的内容时,更改应用程序的代码都不是一件容易的事。 有一个巨大的文件,其中包含许多条件和边缘案例处理逻辑。 我们还想进行试验,这意味着我们的数据源甚至充满了条件。 创建新的小部件时,开发人员必须经过数百行的If语句。 没有我们的全力支持,一切都容易被打破,其他团队也无法做出贡献。 因此,在意识到我们无法在结果列表上进行足够快的迭代之后,我们开始计划在其背后的新架构。 设计目标: 快速迭代新的小部件并使其更容易进入列表 最小化创建新小部件会破坏另一个小部件的风险 使实验变得容易; 添加新的小部件应该不难,也不需要列表后面的团队的全面支持。 可以并行或顺序运行小部件计算代码。 使列表在后端可配置,以便独立于应用发布周期发布 我们称该项目为“ Widgetify”。 从构思到生产: 我们的第一步只是绘图。 我们自己坐下来,做了一些建筑草图。 然后我们提出了自己的想法,并达成了团队共识。 在初步感觉到“它在理论上可行”之后,我们创建了Feature标志并将其推到我们的主分支(尽管我们并未在生产中启用该功能,甚至在内部也未启用)。 然后,我们创建了基类,其中第一个调用端口是显示默认内容的列表。 我们能够对列表进行过滤和排序,所有内容(甚至分析)都可以像以前一样工作。 在此阶段,我们默认情况下在内部启用此功能,以便尽快捕获错误 接下来,我们创建了一些虚拟小部件,并确定了该项目可以证明未来。 有时,我们发现一个旧的小部件无法在新平台上正常工作,因此我们不得不关闭该功能并修复该特定的小部件提供商(在Skyscanner,我们现在每个平台执行2周的发布周期)。 最终,当我们觉得有东西要向其他人展示时,我们开始在内部推广该平台并收集其他团队的反馈。 为此,我们在团队旁边坐了三天,帮助他们创建自己的内容。 作为回报,我们获得了宝贵的反馈,并且基于集体反馈,我们反复进行以使构建新内容变得更加容易。 卡和提供者 Widgetify的工作方式如下:我们要在列表中显示的所有新内容(卡片)类型都必须具有provider 。 我们可以基于功能标记注册此提供程序以启用内容类型。 但是提供商并不总是需要退回卡。 例如,如果您是美国公民或永久居民,或者您位于美国境内,则只有在您的旅行符合美国政府批准的十二个类别之一的情况下,才可以前往古巴。 这是法律要求。 我们在每次搜索时都会启动Cuban警告提供程序 ,但是,只有在搜索条件和用户符合条件时,它才会返回一张卡片。 […]

我最终以“开发者”的身份经历的旅程

就像我们12岁以下的每个孩子一样,我的志向是成为一名医生并挽救生命,或者成为像Strange博士一样,时光倒流般的超级英雄。 但事实是,这些雄心壮志中的90%都没有实现。 随着我们的成长,世界在变化,我们受到世界许多变量的影响,从经济到教育,甚至我们自己的家庭都会经历巨大的变化。 例如,我们可能以跟随父母的脚步为志向,但是一旦改变,它就消失了。 游戏游戏! 当我还在学业时(大约20岁),我是一个游戏迷。 我喜欢游戏,从非彩色的任天堂游戏男孩到索尼的游戏机,包括任天堂WII等最新的游戏机,都曾玩过。 我也玩过许多流行的MMORPG,例如《仙境传说》,《魔兽世界》,《枫之谷》,您可能会喜欢,我很可能也尝试过。 由于对游戏的热爱,我在上大学之前就开始渴望成为一名游戏开发人员。 梦想破灭了,但是…… 在上高中的时候,我会和很多朋友在LAN商店闲逛到玩CounterCountike(曾经很流行的FPS游戏)到深夜,花了数百零花钱。 因此,我在离校考试中表现不佳,也没有参加游戏开发课程。 但这已经激发了我对IT行业的极大兴趣。 简而言之,我最终学习了电子工程。 努力工作,聪明地工作并有信念 作为一名工程专业的学生,​​三年对我来说也不是一件容易的事,我面临着艰难的项目伙伴,复杂的人际关系以及充满挑战性的情绪,无法应对我的未来。 仅在去年,我才被邀请去当地的教堂,信仰注入了我,成为一个更加自信的人,并确保了我的未来。 出于这种信念,我从遇到的挫折中恢复过来,并取得了相对不错的成绩,进入当地一所著名的大学攻读计算机学位。 我作为开发人员的旅程开始了…… 老实说,当我从大学生时代开始时,我从没想过我会成为一名开发人员,但是在这个季节,智能手机和移动应用程序变得越来越普遍,它们正在改变我们的日常工作方式。 考虑到这一点,我决定在罗马的一家海外实习机构尝试进行移动开发,而在我不知情的情况下,这成为了我的新爱好。 激情开始,动力开始…… 我开始观看视频以学习iOS移动应用程序的设计模式,并在两周之内,iOS,Objective-C和Xcode成为了我的“ BFF”,也是我一生的一部分。 我开始构建一个非常不起眼的基于位置的汽车维修应用程序,用户可以将消息发送到总部,并获取该应用程序中确定的最近的可用维修站。 后来,我去构建了一个Facebook数据挖掘应用程序,然后我从大学毕业,进入初创公司以继续这些热情。 到今天为止,我已经开发了20多个应用程序,其中30–40%在应用程序商店中发布。 挑战性 作为开发人员的生活从来都不是一件容易的事,Apple会不断更新其API,淘汰性能不佳的方法,提出更好的方法,使开发人员尽快适应。 我从iOS 6开始构建,直到现在它的iOS 10都发生了巨大变化。 如果我要挖掘出在实习期间写回的代码,在我们进行代码重构之前,它可能不会编译。 许多开发人员会同意我的观点,开发移动应用程序时面临的最大挑战是UI(用户界面),市场上有许多不同的屏幕尺寸,我们必须确保我们的代码适应这些布局。 我要发展多久? 最近有人问我一个关于我在哪里工作的职业道路的问题,我的职业目标是什么? 老实说,我还没有谈论过它,但是我很想向后代讲授我们手中掌握的简单或复杂软件如何才能真正改变我们的生活方式。 因此,到目前为止,我将继续致力于解决问题,并使用我们可以开发的软件使世界变得更美好。 在你走之前… 如果您喜欢这篇文章,您会喜欢Lawrey Swifty Weekly。 这是我免费的每周摘要,其中总结了有关iOS的最佳信息,以及有关生活,生产力和自我完善的内容。 在这里订阅。 加入世界各地的读者,更加快捷!

如何设置Bitrise CI以运行iOS的自动Appium和Cucumber UI测试

为什么要堆叠? 在codequest中,一段时间以来,我们一直在使用Bitrise作为iOS应用程序的CI / CD工具。 最近,我们的团队不断壮大,并且我们已经获得了一个最有价值的新成员–质量检查工程师,他掌握了用Appium和Cucumber.rb(Ruby版本)编写UI测试的知识。 问题是–如何在Bitrise上进行全部设置,目前在这里只有自动化的单元测试运行并测试应用程序部署。 就像我们一样,大多数阅读此书的人可能正在寻求帮助。 令我们惊讶的是,即使是谷歌搜索也无法帮助我们找到逐步的指导。 因此,我将不涉及很多细节,也不用追逐。 我们的环境 下一步将需要一些细节。 可以这样说: 独角兽–这是我们的项目名称 Unicorn.xcworkspace –项目的工作区(我们使用Pods) 独角兽–要构建的Xcode方案名称 Unicorn.app –由构建创建的二进制文件的名称,可以在Xcode中检查(选择目标)➞构建设置➞产品名称 com.codequest.Unicorn –我们的应用程序捆绑包ID AppiumUITests / Unicorn –在git存储库中的此路径下,我们保留UI测试 我们不在git仓库中保留任何.app文件 在Bitrise中创建UI测试步骤 1.通过单击+工作流程按钮并设置名称来创建新的工作流程。