Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用

本文将告诉大家如何从零开始在 iOS 上部署 Walterlv.CloudKeyboard 应用。这个 Walterlv.CloudKeyboard 应用是一个云输入法应用,在 GitHub 完全开源,采用 Xamarin 开发,用途是让手机接收电脑端的打字输入的输入法。因为我没有在 iOS 上找到任何一款稍微能用的输入法,因此只能拜托太子帮我开发一款应用了。太子很给力,帮我开发完成了,但现在的问题就是我如何在我的手机上部署。本文将记录我的部署步骤

太子说:才不是从零开始,第一步就可以放弃,因为第一步是需要去买一台 mac 设备。然后第二步申请开发者,受限于网络,又能让一波开发者放弃了

这部分内容会被苹果不断改改改,因此在阅读本文的时候,请注意你的右下角时间。我写本文的时候是在 2020.11.03 如果你的当前时间距离我写的时间太远了,那么还请小心

假定现在有一台 mac 设备,嗯,我是没有的,于是我就去偷了太子的设备,毕竟他帮我开发了 Walterlv.CloudKeyboard 应用,免费开发应用送设备,听起来逻辑是对的

然后假定现在有一个开发者账号,此时才是真的开始步骤

先通过苹果的应用商店,花费3天的时候下载和安装完成 XCode 开发工具…… 是不是3天,取决于网速

打开 XCode 点击新建应用

在新建应用界面选择好 Team 和输入随意应用名,这个应用名不关键。接着选择 UIKit App Delegate 用于支持 iOS 13 版本,如下图

随意选择一个文件夹保存项目

新建完成之后,大概可以看到的界面如下

进入项目的选项页面,双击或右击项目点选项都可以进入此页面

先放开 XCode 应用,再花三天时间安装上 VisualStudio 以及 Xamarin 功能,从 https://github.com/walterlv/Walterlv.CloudKeyboard 下载好代码然后打开

以下界面是在 VisualStudio 上,咱需要在 VisualStudio 上修改捆绑包标识符,修改方法就是双击 Info.plist 文件

以上关键的就是捆绑包标识符的内容

这里的捆绑包标识符的命名规则是 com.开发者团队名或组织名.随意的应用 格式,而我的开发者团队名实际是 lindexi-gd 而不是 lindexi_gd 或 lindexi 哈,这部分需要在申请开发者账号的时候记录哦

这一步的难度最大的地方在于了解自己的开发者团队名或组织名是什么

在 Walterlv.CloudKeyboard 项目上包含了两个项目,一个是 iOS 键盘应用,另一个是键盘扩展。这两个项目都需要做相同的更改,刚才修改好了 Walterlv.CloudKeyboard.iOS 项目。现在需要修改 Walterlv.CloudKeyboard.iOS.Extension 项目

双击 Walterlv.CloudKeyboard.iOS.Extension 项目的 Info.plist 文件,可以看到如下界面

编辑捆绑包标识符,内容就是在原先的 Walterlv.CloudKeyboard.iOS 项目的捆绑包标识符基础上的后面加上 .Keyboard如下图

修改完成之后,记得点保存

下一步再回到 XCode 里面,点击签名选项卡,在 Bundle Identifier 输入框里面输入刚才在 Walterlv.CloudKeyboard.iOS.Extension 项目的 Info.plist 文件写的捆绑包标识符,点击 Tab 键失焦,用于生成开发者签名

生成之后大概可以看到如下界面

接着需要在 XCode 先部署一下,在 XCode 部署的作用就是生成一个占坑的应用,用于解锁信任证书

部署之前需要点击选择自己的 iOS 应用,当前就需要让自己的 iOS 应用和 mac 相连了

可以看到我的手机的版本比较低,而我也不想升级,因为一升级了,我的一堆应用就用不了。而刚才为了让应用在我手机能部署,也就选择了 UIKit App Delegate 框架

但此时依然部署将会失败,原因是在 .xcodeproj 文件里面记录的版本号会更高,使用 VisualStudio Code 打开.xcodeproj 文件,替换掉版本

点击部署按钮,可以看到 XCode 执行安装

但是在安装完成之后,会提示启动失败

在 XCode 上提示 Could not launch “foo” Security 的原因就是发者没有被信任

回到手机上,可以看到 XCode 安装的应用

点击打开这个应用将会失败,因为无法验证 App 需要信任开发者

添加信任的步骤如下

打开设置,进入通用

进入设备管理界面

可以在设备管理界面里面看到自己的证书,点击自己的证书

点击验证

等待一下网络,可以看到应用状态是已验证

此时再次打开 foo 应用,可以看到应用打开

以上的这一步关键就是为了在通用的设备管理里面同意加入自己的证书,这个在 XCode 安装的应用也就被称为占坑的应用

下一步就是尝试在 VisualStudio 开始部署自己的键盘应用,因为我的 mac 设备其实是太子的设备,只是被我偷过来而已,账号啥的信息还没切过来,在 VisualStudio 部署的时候将会提示 iOS code signing key ‘iPhone Developer walterxx@iCloud.com(F53jxxxxxx) not found in keychain.’ 如下图

解决方法就是右击项目,点击选项,修改捆绑包签名

进入捆绑包里面,修改预配配置文件

选择自己的预配配置文件和签名标识,注意不要选自动

选择之后的效果大概如下

上面这一步详细请看 Xamarin iOS 切换开发者账号之后的签名标识和预配配置文件更新方法

也就是说在发现这一步没有任何可以选择的时候,问题的原因就是没有在 XCode 的签名里面进行生成,需要确定在 XCode 里面生成,如下图

在 Bundle Identifier 输入之后,按下 Tab 键失焦,此时将会提示创建,如下图

此时再次在 VisualStudio 进行部署,如果提示因为存在同名的签名的应用,原因就是开始的时候在 XCode 创建的占坑应用用了当前在 VisualStudio 部署使用的捆绑包签名

 BundleIDConflictWithOtherIdentifier: App with identifier com.lindexi-gd.CloudKeyboard.Keyboard is already installed, so we can't install App Extension with that same identifier.
error MT1006: Could not install the application '/Users/lvyi/Documents/Codes/walterlv/Walterlv.CloudKeyboard/CloudKeyboard.iOS/bin/iPhone/Debug/device-builds/iphone10.3-13.1.2/Walterlv.CloudKeyboard.app' on the device 'lindexi': AMDeviceSecureInstallApplicationBundle returned: 0xe80000cc (kAMDBundleIDConflictWithOtherIdentifierError).

此时不能回到手机上删除刚才的占坑应用,因为这是一个占坑应用。如果被删除了,那么将会让刚才在设备管理的签名失效

因此解决方法就是再次回到 XCode 创建另一个应用,修改 Bundle Identifier 重新部署

重新部署之后,可以在手机上看到两个应用

删除掉一开始部署的占坑应用

重新回到 VisualStudio 点击构建部署,此时在手机上可以看到 Xamarin 的图标和部署上的应用

在 VisualStudio 启动调试的时候,可以看到 Xamarin 的界面

这是一个键盘应用,需要经过如下配置才能使用上

进入设置,进入通用,进入键盘

点击键盘

点击添加键盘

选择 CloudKeyBoard 点击之后可以看到如下界面

点击进入云键盘 Cloud 点击允许完全访问

此时就可以使用上 Walterlv 的云键盘了,这个项目在 GitHub 完全开源

开源地址请看 https://github.com/walterlv/Walterlv.CloudKeyboard

这就是整个部署的过程,步骤还不到 50 步,相信你被苹果坑几次就会部署了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10 Terminal + WSL 2 安装配置指南,精致开发体验

自从 Windows Terminal 正式发布后就再没有用过 Windows 系统自带的终端了。主要是 Terminal 简洁且灵活,更重要的是支持特殊字体,通过一些简单的配置可以使得终端看起来更舒适养眼。自从 Win 10 有了 Linux 子系统(WSL)&#xff…

mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...

mysqldump,NAVICAT转储,select * outfile在千级数据,万级,百万级数据下的表现。千级数据mysqldump导出sql文件导出是出了拒绝访问的错误;为对应目录(.sql文件要保存的目录)的对应用户添加(正在使用的用户)添加写入权限即可。mysql…

JetBrains 开发者调查 - 编程语言趋势

几个月前在公众号里发布了 StackOverflow 2020 开发者调查结果,其结果对 .NET Core 很友好。今天我们看看 JetBrains 2017-2020 四年的开发者调查结果统计,JetBrains 是偏 Java 系的,尤其是本家的 Kotlin 语言。 我们看一下在编程语言方面的趋…

mycli mysql_MyCLI :易于使用的 MySQL/MariaDB 客户端

导读MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL、MariaDB 和 Percona,支持自动补全和语法高亮。它是使用 prompt_toolkit库写的,需要 Python 2.7、3.3、3.4、3.5 和 3.6 的支持。MyCLI 还支持通过 SSL 安全连接…

究竟是什么可以比反射还快实现动态调用?

戏精分享 C#表达式树,第一季正式完稿 前不久,我们发布了《只要十步,你就可以应用表达式树来优化动态调用》。观众们普遍反映文章的内容太多复杂不太容易理解。因此,我们以此为契机发布了《戏精分享 C#表达式树》系列视频。现在&am…

BCVP,想真正为社区做努力的开发者们

基于Net/Core,快速搭建 API & SPA 及微服务应用组织BASE NETCORE (VUE) PROJECT TEAM每一个.NET开发者都可以通过自己的开源项目(最好可以配套简单发表些文章)在这里进行分享,BCVP开发者组织的意义就是激发和挖掘更多的作品,可能偏基础&a…

求关系模式r的所有候选码_2_1关系数据库的基本概念

1.关系数据结构单一的数据结构-------关系现实世界中的实体以及实体间各种联系均用关系来表示2.域:一组具有相同数据类型的值的集合。例如:整数实数介于某个取值范围的整数指定长度的字符串集合{“男”,“女”}.............3.笛卡尔积3.1 给…

Docker:恢复对开源项目的无限制访问

喜欢就关注我们吧!继宣布针对免费用户的拉速限制声明之后,Docker 现如今又透露了进一步的策略更新,旨在恢复对开源项目的无限制访问。Docker 方面此表示,为了支持开源社区,他们为开源项目制定了一个特殊的计划&#xf…

真正拖垮你的,是沉没成本

职场&认知洞察 丨 作者 / findyi这是findyi公众号分享的第91篇原创文章一个洋友问:“洋哥,我在这家创业公司3年了,但老板承诺的股份一直没兑现。现在想离开,但又特别不甘心,我应该怎么做”。我回复:“找…

别“躺”着了,赶紧把「复盘」做起来

大家好,我是Z哥。有一种类型的故事大多数人都喜欢,就是“屌丝逆袭”的故事,这也是很多小说的题材。不管是在小说还是现实中,这样的逆袭都不是一蹴而就的。并且,大多数人一直只在逆袭的路上,最终能成功完成逆…

注意.NET Core进行请求转发问题

【导读】近日,有关注我公众号的小伙伴私信我,遇到一个问题搞了很久没解决,此问题具有参考意义,这里跟大家分享下,希望对你能有所帮助内网环境跟外网隔离,现在外网的请求都需要一个专用服务器转接到内网处理…

react 数字转字符_深入浅出 React -- JSX

什么是 JSXJSX 是一个 JavaScript 的语法扩展。JSX 可能会使人联想到模版语言&#xff0c;但它具有 JavaScript 的全部功能在 React 中&#xff0c;JSX 仅仅是 React.createElement(component, props, ...children) 函数的语法糖如下 JSX 代码&#xff1a;<MyButton color&q…

mybatis mysql schema_MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

一、MyBatis简介与配置MyBatisSpringMySql1.1MyBatis简介MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。…

.NET架构小技巧(7)——做好小的项目

一屋不扫&#xff0c;何以扫天下。再说也没有那么多天下(大系统)可扫&#xff0c;更多的是一个个自己居住的小屋(手边的小项目&#xff0c;子模块)&#xff0c;所以认真的开始扫自己的小屋。在visual studio中&#xff0c;解决方案(Solution)下可以创建多个项目(Project)&#…

使用 C# 9.0 新语法提升 if 语句美感

C# 语言一贯秉承简洁优美的宗旨&#xff0c;每次升级都会带来一些语法糖&#xff0c;让我们可以使代码变得更简洁。本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例。使用属性模式代替 IsNullOrEmpty在任何你使用 IsNullOrEmpty 的时候&#xff0c;可以考虑这样替换&#…

在 Azure App Service 上启用 Application Request Routing

点击上方蓝字关注“汪宇杰博客”导语我们在IIS上经常使用 Application Request Routing (ARR) 模块做反向代理。Azure App Service 使用的也是 IIS&#xff0c;照理来说应该也能做反代&#xff0c;但默认情况下它是不行的&#xff0c;我们来看看如何给在 App Service 上启用 AR…

【专题】多角度深入解析开放原子开源基金会

喜欢就关注我们吧&#xff01;2020 年 9 月 9 日&#xff0c;开放原子开源基金会正式对外发声&#xff0c;同天&#xff0c;宣布百度超级链正式成为基金会首个捐赠项目。9 月 10 日&#xff0c;华为 OpenHarmony 操作系统开源&#xff0c;开放原子开源基金会获捐 OpenHarmony。…

C#刷剑指Offer | 【常考题】最小的k个数

【C#刷题】| 作者 / Edison Zhou这是EdisonTalk的第299篇学习分享我们来用之前学到的数据结构知识来刷《剑指Offer》的一些核心题目&#xff08;精选了其中30道题目&#xff09;&#xff0c;希望对你有帮助&#xff01;本文题目为&#xff1a;最小的k个数。1题目介绍题目&#…

晶振噪声及杂散_晶振如何匹配电容看了就知道

描述一、什么是晶振了解晶振之前&#xff0c;我们先来看一下我们最为熟悉的51单片机&#xff0c;我们都知道51单片机最小系统包括供电电源、复位电路以及晶振系统。这是CPU能跑起来的最基本条件。由此我们可以看到晶振在电路当中的作用&#xff0c;那就是晶振电路用于产生时间频…

C# 中的 ref 已经被放开,或许你已经不认识了

一&#xff1a;背景 1. 讲故事最近在翻 netcore 源码看&#xff0c;发现框架中有不少的代码都被 ref 给修饰了&#xff0c;我去&#xff0c;这还是我认识的 ref 吗&#xff1f;就拿 Span 来说&#xff0c;代码如下&#xff1a;public readonly ref struct Span<T>{public…