CocoaPods的本地开发

CocoaPods使您的应用程序模块化和集成外部库或框架变得非常容易。 但是,对于更特定的应用程序,该工具会很快达到其极限。 问题如下:我的库是通过我的回购的master分支克隆的。 要测试更改,必须将它们合并到master分支中,并提供一个version标记。 解决方案:本地podfile,该文件不吸引版本,但直接从目录获取源。 创建本地Podfile 首先,您必须创建一个名为“ Podfile.local”的新文件。 现在,您可以在此处覆盖依赖关系。 内部Pod的定义应在Podfile中覆盖。 我们可以通过简单添加以下红宝石线来做到这一点: 修改后的podfile现在应该看起来像这样: 忽略本地文件 在.gitignore中包含本地文件很重要。 否则可能会意外检查文件。 如果应用是通过Jenkins和/或Fastlane构建的,则本地文件也会被吸引,而不是master分支的文件。 我总是在.gitignore上有Podfile.lock和Podfile.local 。

ARKit和SceneKit入门

尽管增强现实技术已经存在了很多年,并且基于目标的体验的准确性不断提高,但是诸如PokémonGO等游戏的普及以及Apple发行的ARKit和Google的Android的AR Core的推出AR掌握在大多数消费者手中。 凭借能够了解您周围世界的无目标AR的能力,我们有机会打造出引人入胜的新AR体验。 随着新能力的出现,我们在创造这些体验的工作中将面临新的挑战。 在接下来的几篇文章中,我们将逐步建立各种流程,获取3D模型,对其进行处理并将其用于我们自己的AR体验中。 可以在https://github.com/AbovegroundDan/ARTutorial_Part1上找到此文章的项目。 基本 我们的ARKit应用程序将使用SceneKit进行渲染。 SceneKit是适用于iOS的本机3D渲染引擎,可直接与ARKit挂钩。 3D模型格式 SceneKit中有一些可用的本机格式可用于加载3D模型,但我们将专注于Collada Digital Asset Exchange或DAE格式。 DAE格式使我们可以在场景文件中包含多个对象,包括相机和灯光以及任何几何图形。 SceneKit具有用于加载场景文件的例程,我们将编写一些扩展程序以简化加载。 要编辑3D模型,我们将使用Blender,因为它是免费的并且可以满足我们的需求。 尺寸和单位 SceneKit使用仪表作为尺寸调整和物理模拟的度量单位。 因此,当我们看到任何涉及尺寸的内容时,包括Xcode中的“场景编辑器”,它始终是指米。 在Blender中,我们还需要确保以米为单位工作。 Blender的默认值是米单位,但是检查总比处理场景中的巨型或微小模型要安全得多。 在Blender的右侧面板中,选择“场景”选项卡,并确保将“单位”设置为“默认”或“仪表”。 坐标系 SceneKit在“ Y向上”系统中运行,这意味着Y轴朝上,而Blender的Z轴朝上。 在导出场景并将其加载到SceneKit时,我们需要意识到这一点。 通常这不是问题,因为出口商通常会负责转换。 根据您使用的是自定义导出器还是在不同的坐标系中工作,可能需要在建模应用程序内部旋转模型。 管道 从艺术家那里获得模型或自己完成所有工作时能够快速工作的秘诀是拥有良好的工作流程。 在这种情况下,我们需要一个良好的管道来以尽可能少的按摩和处理将模型带入我们的经验。 搅拌机加工和出口 我们首先要考虑的是我们是否要使用AR世界中文件中的模型来源。 在此示例中,我们将直接从3D模型文件创建AR场景,因此我们不会做太多更改。 确保稍后进行更简单的导入的一件事是确保文件路径是相对的,以便以后稍后导入或必须将文件传输到另一台计算机时,纹理的路径将继续指向有效文件。 归一化 我建议将每个模型的当前位置,旋转和比例标准化为基准值。 例如,如果在建模过程中将模式缩放为(0.87,0.92,0.87)以更好地适合场景,则应用该缩放将使当前缩放为(1.0,1.0,1.0),但将模型保持在该大小你有过。 这可能会干扰设置为特定值的动画,但是对于静态模型而言,它可以很好地工作,并且如果我们要设置比例或旋转值的动画,可以让我们在代码中进行某些假设。 为了规范当前值,我们必须使用Blender的Apply选项应用于对象。 通过单击场景层次面板旁边的+按钮,打开属性面板。 选择模型将向我们显示以下属性。 在这里我们可以看到对象具有旋转和比例。 我们将删除对象上的旋转,但将比例保持在它们所处的值(这是我们的美术师打算如何显示对象),但是我们要做的是将这些值设为默认值或身份值。 选择对象后,我们从底部菜单栏中选择“ 对象”->“应用”->“旋转和缩放”菜单项。 完成此操作后,我们可以看到旋转值分别为(0,0,0),缩放比例为(1.0,1.0,1.0),正是我们想要的值。 在这种特殊情况下,这些对象是单独的网格对象,我们现在要做的是将它们组合在一起,以便我们可以整体上操纵这些对象。 让我们创建一个父转换并将所有这些对象作为其子对象。 从3D视图底部的“添加”菜单中,选择“ 添加”->“空”->“平轴” 。 在“层次结构”视图中,将“ Empty”对象重命名为“ […]

App Store 2018提示和清单

Apple的App Store在2017年9月启动iOS 11时进行了重大修改。多年来,移动设备上的App Store看起来相同,并提供功能和顶部图表部分,但现在所有这些都已更改。 苹果公司解释说,更改是为了使应用程序在App Store中更容易被发现。 用户可见的主要变化是: 1)没有收益图表。 2)应用程式和游戏有不同的热门排行榜。 3)新的“今日”部分与编辑人员故事一起手动策划。 4)在应用内购买的应用,作为单独的产品在App Store中进行。 UI的更改也着重于为用户提供更好的体验。 这些更改包括: 1)较短的应用名称和新的字幕字段。 2)自动播放视频预览。 3)用户在搜索中看到三个垂直屏幕截图(之前两个)或一个水平屏幕截图(之前一个半)。 4)由于评论已移至顶部,因此更加重视评论。 5)还有更多查看顶部图表的步骤,它会影响该部分的受欢迎程度。 在主要部分,免费和付费图表仅显示三个应用程序/游戏。 6)开发人员现在可以显示多达10个屏幕截图(以前只有5个),以向客户展示更多的应用程序体验。 那么如何从App Store 2018中获得最大收益呢? 从App Store Optimization(ASO)的角度来看,App开发人员应确保: 1)他们的应用标题受新应用名称限制(最多30个字符)。 现在无需使用关键字向应用标题发送垃圾邮件。 使其简洁明了。 2)应用程序元数据中使用了新的字幕字段。 使用应用字幕来吸引用户的号召性用语(例如,立即下载应用)。 它可以导致20%的下载量。 (来源,splitmetrics.com) 3)对于垂直屏幕截图文本,请使用较大的字体。 以前使用的任何字体大小都应该增加,因为即使在较大的iPhone X熨平板上也很难阅读文本。 4)添加新的Apple API来收集应用程序中的评论。 它将大大增加评论量(根据Apptentive最多可提高30%)。 现在,用户每年仅需3次即可进行应用审核,因此请明智地要求进行审核。 最好的时机是让用户体验到积极的情绪后再查看您的应用。 用户可能会在您的应用中获得任何形式的奖励或赢得级别之后。 当用户赢得胜利时,他们更有可能对您的应用进行正面评价。 5)填写新的促销文本字段。 它没有建立索引,但是是在应用程序中宣布交易或销售的好地方。 目前,应用程序描述页面在通过审核过程后不可编辑。 促销文字字段应用于以后可能发布的所有公告。 促销文字显示在应用程序描述文字的顶部,从用户角度看,它就像一个字段。 6)将所有丢失的元数据添加到应用内购买中,以使它们符合Apple的功能。 推广的应用程序内可见,可以通过App Store搜索或在应用程序页面上购买。 7)与以前的仅限屏幕截图版本相比,制作出色的预览视频并评估应用程序页面性能(通过iTunes Analytics)。 自动播放的视频可以为您的应用(尤其是游戏)获得更多下载。 […]

我在React-Native和iOS之间集成的经验

好吧,这是我第一次使用React Native,但不仅是第一次与本地iOS应用程序集成。 项目配置 通常,我从Facebook官方文档开始: 与现有应用程序集成·React Native 从头开始新的移动应用程序时,React Native很棒。 但是,它对于添加… facebook.github.io 也很好。 必备的先决条件是已安装npm ,即JavaScript的软件包管理器。 一切都非常简单: https://nodejs.org/en/download/ 最后我执行: $ npm -v 我看到我已经安装了版本5.6.0 除此之外,建议安装: CocoaPods ,用于Objective-C,Swift和在Objective-C运行时上运行的任何其他语言的依赖项管理器。 为了便于安装,我使用Homebrew (macOS缺少的软件包管理器)进行安装: $ brew安装cocoapods 好的,您可以开始设置项目了。 在iOS项目中,我创建了一个“ js ”文件夹,其中包含React-Native项目。 首先,在此文件夹中,创建具有以下结构的文件“ package.json ”。 请注意,我的应用程序称为“ StoryReact” 该应用无法生成,“ Yoga-internal.h”文件似乎存在错误。 经过一些在线研究之后,我决定在GitHub上创建一个问题,但是我得到了负面的反馈,我将不得不手动更改框架的代码。 但是我不喜欢它作为解决方案,因此我尝试切换到另一个版本 。 然后我删除: “豆荚” “ Podfile.lock” “ js / node_modules” 在阅读到从0.54到最新版本的版本都给出了相同的问题之后,我回到终端并安装了React-Native的版本0.51.0 。 因此,我将执行与之前相同的命令,以使用pod在项目上安装react-native和依赖项,相反,包括对Podfile的更改: $ yarn add […]

使用无构建测试,xctestrun和Fastlane加速iOS CI

PS:这篇文章最初发表在我的个人博客上; XCBlog 在这里 在WWDC 2016上,有一个关于“高级测试和持续集成”的精彩演讲,其中提到了XCTest Framework,Xcode-Sever和xcodebuild命令行工具中的许多新功能。 我们可以使用这些功能来加快iOS持续集成过程。 当前的iOS CI限制 在Xcode 8之前,我们必须在CI上运行单元测试和UI测试之前构建,编译和应用程序,这是正在运行的任务的重复。 分布式测试非常耗时,而且我们已经在每台机器上构建和编译源代码。 实际上,在CI Server上进行构建和编译需要花费大量的构建时间。 Xcode 8和xcodebuild功能 Xcode 8版本在“ xcodebuild”中购买了几个新功能,可以为iOS开发和测试过程增加很多价值。 “ xcodebuild”是用于从命令行构建,运行和执行我们的应用程序的命令行工具。 在Xcode服务器中使用。 Xcode 8现在在xcodebuild命令行工具中进行了一些改进。 测试构建 xcodebuild现在具有“ build-for-testing”选项,它像往常一样采用工作区方案和目标,但是最重要的是它将创建“ XCTESTRUN”文件。 我们只需要执行“测试构建”操作 $ xcodebuild -workspace -scheme -sdk iphonesimulator -destination’platform = iOS Simulator,name = ,OS = 10.2’构建测试 这应该构建用于测试的应用程序,并在DerivedData中创建xctestrun文件。 无需构建即可测试 xcodebuid还具有另一个名为“ test-without-building”的选项,在这里我们不需要提供工作区,而是指定XCTESTRUN文件,该文件将注入该文件并运行所有测试。 此功能对于分布式测试非常有用,因为我们可以在一台计算机上创建XCTESTRUN文件并分发到其他特定于测试的计算机。 为了使用它,我们可以在不构建的情况下将此选项指定为ru测试 $ xcodebuild -workspace -scheme -sdk iphonesimulator […]

介绍三星互联网的断开连接

从4.0开始,Samsung Internet提供了编写扩展功能以阻止网页上内容的功能。 内容阻止扩展程序不仅允许用户浏览网络而不会不必要的内容使屏幕混乱,而且还提供了更安全,更私密地浏览网络的功能。 最近,我们宣布了三星Internet 5.0随附的所有新功能。 在Samsung Internet 5.0中,我们通过引入Duck Duck Go搜索引擎进一步提高了隐私性,使您的搜索更加私密。 今天,我们非常高兴地宣布,Disconnect扩展了Samsung Internet。 该扩展程序为Samsung Internet浏览器提供了免费的跟踪保护,使浏览体验更快,更安全,更好。 断开连接可阻止Samsung Internet浏览器中的侵犯隐私的跟踪器,从而使您的网络浏览更加安全,将页面加载速度提高多达44%,并将蜂窝数据浪费减少多达39%(具体取决于您的设备使用情况)! 要为Samsung Internet启用跟踪保护,请从playstore下载Disconnect extension,然后从更多>设置>高级>阻止内容中启用“为Samsung Browser断开连接”。 Disconnect还推出了“ Disconnect Pro” Android应用,该应用专门为三星设备提供设备范围的跟踪保护。 您可以从Samsung设备上的Galaxy App商店下载Disconnect Pro。 三星致力于在日益连接的在线世界中提供隐私选项和控制,我们很高兴与Disconnect合作。

学习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的基础知识。

iOS的远程推送通知。 APNS

2017年11月17日 创建您的项目(选择Xcode时,命令移位“ N”)。 然后单击下一步。 然后命名。 然后,单击“功能”,然后打开推送通知。 如果您无法打开推送通知。 您可能尚未创建付费的Apple Developer帐户。 在这里这样做: 苹果开发者中心 哦,是的。。。也可以在您在这里时执行此操作,否则您会收到烦人的警告,有时您的推送通知可能无法正常工作。 现在转到苹果的开发人员计划。 我们将上传证书申请,以获取我们的第一份证书。 转到您的帐户。 如果您没有,请创建一个并支付$ 100美元的年费或在阅读本手册时的年费。 登录后,单击证书,标识符和配置文件。 我们必须先单击应用程序ID,而不是直接进入证书部分。 单击+按钮为您的项目添加一个应用程序ID。 App ID description将帮助您在项目ID列表中标识您的项目。 如果您希望能够看到该说明(使用通配符推荐),请使用显式的App ID。 从您的项目中获取捆绑包ID。 向下滚动并选择“推送通知”。 然后单击继续。 如果看到此警告: 您可能单击了两次“ Continue 。 您的ID应该在您单击此处时显示: 现在,无论如何都单击App IDs 。 找到您各自的应用程序ID,然后单击它。 您应该看到以下视图。 单击编辑。 然后向下滚动到“推送通知”部分。 点击Create Certificate 。 苹果使用一台服务器将推送通知发送到未从商店下载的iOS应用程序(称为SandBox / Development),将另一台服务器(生产)发送通知。 您的应用将根据您系统当时使用的证书与相应的APNS服务器保持持久连接。 开发证书不适用于从iTunes下载的应用程序。 创建开发和生产证书后,您将存储在服务器(在apns上下文中为Provider)中。 您的开发服务器将持有开发证书,而生产服务器将持有您的生产证书。 我将在本教程中进行量产。 如果您要进行开发,那么它只能在您的开发环境上工作,而不能在应用程序商店中工作。 通过钥匙串访问获取证书签名请求。 通过右上角的搜索图标,最容易找到钥匙串Access应用程序。 打开“钥匙串访问”后,请向证书颁发机构申请证书。 […]

如何为Mac OS X和Windows 10设置Epson Printer L355 Wi-Fi连接?

要使用打印机设备,必须进行设置并将其与计算机连接。 这是用户在打印任何文档之前需要执行的必不可少的基本步骤。 在下面的这篇文章中,我们旨在让您了解可以帮助您将Epson Printer L355与计算机系统连接的过程。 无论您使用的是Mac OS还是Windows 10,您都将了解它们的过程。 以下是建立Epson Printer L355与Mac OS X和Windows 10的连接时需要遵循的要点。 · 步骤1:首先,您需要下载并运行Epson Connect打印机设置实用程序。 在此之后,单击“继续”选项。 · 步骤2:现在,在下一步中,您需要同意软件的许可协议。 · 步骤3:单击安装,然后选择关闭选项。 · 步骤4:完成上述步骤后,单击您的产品,然后选择“下一步”选项。单击应用程序>爱普生软件,然后双击爱普生连接打印机设置。 · 步骤5:现在,选择“打印机注册”选项,然后选择“下一步”选项。您将在屏幕上看到注册消息,单击“确定”。 ·步骤6:在该过程的下一步中,您需要向下滚动并单击“我接受条款和条件”,然后选择“下一步”。 ·步骤7:现在,您需要执行以下操作之一: 1.如果您要建立一个新帐户,请填写“创建一个Epson Connect帐户”表格,然后单击“完成”。 2.如果您正在使用当前帐户注册新产品,则选择“我已经有一个帐户”选项,填写“添加新打印机”表格,然后单击“添加”。 · 步骤8:单击关闭选项。 这是在计算机系统上设置Epson打印机所需要做的全部工作。 即使执行了这些步骤,您也无法完成它,不用担心,只需致电我们位于纽约市的爱普生维修中心 。 我们聚集了一支对爱普生打印机设备有全面了解的专业人员团队,可以轻松解决最复杂的问题。 凭借我们的广泛影响,我们已为纽约甚至更远地方的许多客户提供服务。 如果您还在寻找可以满足您所有期望的纽约市爱普生打印机维修,那么您可以根据我们的要求进行搜索。 我们承诺为您提供物有所值的合适解决方案。 无论您位于纽约市的何处,我们的专业人员都会在承诺的时间内为您提供出色的解决方案。 因此,如果您遇到爱普生设备的问题并想设置爱普生L355 Wi-Fi配置,请致电我们的爱普生打印机支持电话,获得世界一流解决方案的即时帮助。 阅读更多: 纽约市最好的复印机和打印机维修服务提供商是哪家?

揭秘iOS应用的编码–一个完整的新手!

我只编码过一个应用,EVER,而且我不是程序员。 我的前一个职业是从事建筑设计的设计建筑师长达11年。 作为设计了大部分生命(包括uni在内的17年)的人,我看到和记住代码的方式可能与典型的程序员完全不同。 那么我怎么看代码呢? 与典型程序员的主要区别是: 我只是在开车,而不是在学习如何设计汽车。 我不了解编程的所有概念。 就像我会说广东话,但不会读或写。 对于新手编码员来说,说话就足够了。 为什么这对非编码人员有利? 关于编码,任何人都会告诉您的最重要的事情只是开始编码。 阅读教程并了解相关理论非常好,但是作为一个新手,为什么不从头开始呢? 但是,当然不是那么容易吗? 开始一些已知的事情,尤其是像编码这样令人生畏的事情,最主要的是恐惧。 只是您会学会忍受编码的恐惧。 在代码中总会有一些您不知道的东西。 这是我了解使用Objective C进行编码的一些方法,从长远来看将为您提供帮助。 目标C是一种基于对象的编程语言。 它的意思是: 就像罐中的软糖一样,您编写的每个小脚本都是一个软糖。 一些软糖具有相同的颜色,它们可能属于同一类别,即黄色与绿色软糖类别。 此描述并不完全准确,但是对于非编码人员,请暂时忘记专家的知识! 编码软糖需要3个常规步骤。 1.初始化它,2.添加属性,3.然后将它添加到某些东西中。 而已! 例如1.启动黄豆。 2.定义大小,颜色和点。 3.然后将其添加到果冻罐中。 您的第一堂课完了! 真的,那是它的主要要旨。 当您想到编码为软心豆豆时容易吗? 当然,制作1或2个软心豆糖会制作非常非常简单的程序。 但这是一个开始。 这是一些创建按钮的真实代码: UIButton * btn = [[UIButton alloc] init]; btn.frame = CGRectMake(0,0,100,100); [btn setTitle:@“我是一个软心豆粒糖” forState:UIControlStateNormal]; btn.titleLabel.font = [UIFont fontWithName:@“ SFUIText-Regular” size:15]; [jar […]