如何在多个iOSapp里共享数据

2023-11-01

转自:http://evgenii.com/blog/sharing-keychain-in-ios/

如有侵犯,请来信oiken@qq.com


使用了KeyAccess这个第三方库保存UUID,原来设计是用了access group,可以多个app共享的,

可惜真机运行时出错了,log提示:

"Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements."

找了资料:https://github.com/kishikawakatsumi/KeychainAccess/issues/52

说了半天,都没搞好,里面的这篇链接(看下文),貌似是能解决的,可是我这里好像是设置不了苹果网页管理那里的group 权限,当前是disable,

想着暂时也不需要多个app共享uuid,就去掉了keyaccess里的参数,只管保证本app能拿回来相同的UUID就好了。

How to share Keychain between iOS apps


Keychain is a secure storage suitable for short bits of sensitive information like passwords or credit card numbers. By default the data saved in one app can not be read in other apps. In most cases this is exactly what we need.

However, sometimes we need to share Keychain items between multiple apps on the same device. For instance, suppose we created two apps where users can log into the same account. It would be nice to have ability to share the login information between these apps. This way the user will only need to log in once in one of the apps.

Fortunately, there is a way to share Keychain items between apps and it can be done by using Keychain Groups. Here is how to do it. The following steps need to be done in all apps where you want to share the Keychain items.

1) Turn on Keychain sharing in Xcode

  1. Select your app target and click Capabilities tab.
  2. Turn on the Keychain Sharing capability.

Turn on Keychain sharing in Xcode

2) Select developer team

3) Specify Keychain group name

Expand the Keychain Sharing capability settings and you will see your app's bundle ID used as the keychain group. You may want to change it to something meaningful to you, for example myKeychainGroup1. Remember the group you entered because you will use it in the code later.

Specify Keychain access group name in Xcode

4) App ID Prefix and Keychain group name

Knowing the group name you entered is not enough for sharing the Keychain. You also need to know your App ID Prefix which is added to the beginning of the group name. In order to see how it works click on the.entitlements file and look at the value of the Keychain Access Groups array.

App ID prefix in entitlements file

You will notice that the access group value has the form of$(AppIdentifierPrefix)myKeychainGroup1. The$(AppIdentifierPrefix) part will be replaced by your App ID Prefix. The problem is that at this stage we probably have no clue what it is, but we will soon find out.

5) What is my App ID Prefix?

The App ID Prefix (also called Team ID) is a unique text identifier associated with your Apple developer account that allows to share keychain and pasteboard items between your apps. Here is how to find what it is:

  • Login to you Apple developer account (also known as Member Center)developer.apple.com/account.
  • Open the Certificates, Identifiers & Profiles page.
  • Tap the App IDs link under Identifiers.
  • Tap on an existing app ID or create a new one and you will find an App ID prefix there.

Determine App ID Prefix

Now you know your App ID prefix and the full Keychain access group name will look like this:

AB123CDE45.myKeychainGroup1

6) Accessing shared Keychain items

We have enabled the Keychain sharing and found out the keychain group name. Now we can delete, add and retrieve shared Keychain items. To work with Keychain you can use one of many Keychain libraries that support access groups (Keychain Swift is one). But here I will show how to do it directly using the built-in Keychain API. The main rule is to pass the access group name with the kSecAttrAccessGroup query key intoSecItemAddSecItemDelete and SecItemCopyMatching functions.

Delete a shared Keychain item

let itemKey = "My key"
let itemValue = "My secretive bee 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在多个iOSapp里共享数据 的相关文章

  • python--七夕小游戏

    众所周知 我们python编程语言是可以用来做网站应用的 也可以做客户端应用的 但是客户端不懂python 就会出现很多让人奔溃的事件 但是 我们可以通过python中的第三方模块将我们的脚本转成exe文件运行 1 打开cmd 进入到终端下
  • Material Design【Android-Toolbar,滑动菜单,悬浮按钮,卡片布局,下拉刷新和可折叠式标题栏及案例】

    文章目录 Material Design 界面设计 1 Toolbar 标题栏 2 滑动菜单 3 悬浮按钮和可交互提示 4 卡片布局 5 下拉刷新 6 可折叠式标题栏 Material Design 界面设计 1 Toolbar 标题栏 1
  • Eclipse 历史版本

    url http archive eclipse org eclipse downloads index php url
  • 2023年3月27日--4月22日(ue视频教程,10小时,合计1989小时,剩余8011小时)

    目前 ue视频教程进行到了智 慧 城 市 3 13 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 fps1 8 socket 2 57 Opengl 5 9 G
  • 【C++】队列(queue)的使用

    目录 一 queue 简介 二 queue 构造函数 三 queue 赋值操作 四 queue 数据存取 五 queue 其他操作 六 queue 总结分析 如果这篇文章对你有所帮助 渴望获得你的一个点赞 一 queue 简介 C 中 st
  • 元宇宙通证-二、元宇宙无限游戏的无限正和机遇

    元宇宙无限游戏的无限正和机遇 首先 我们需要为游戏正名 在保守者看了 游戏是互联网时代的 数字毒品 让年轻人沉迷其中无法自拔 在科技进步的推动者看了 游戏并非玩物丧志 而是改变世界的手段 游戏让我们用想象力创造了一个平行宇宙 打开了一个充满
  • 对数据进行删除过程出现invalid character错误

    错误背景 在springmvc mybatis maven项目中 连接oracle对数据进行删除操作报以下错误 DEBUG 2018 12 18 23 10 47 com mchange v2 c3p0 impl DefaultConnec
  • 【HBZ分享】ES的评分score机制的原理

    score类型 基础评分boost 默认2 2 逆向文档频率值 IDF 表示该词再文档中 ES中 出现的次数越多 表示越不重要 评分越低 关键词在文档中出现的频率 TF 表示该词在文档中出现的频率 频率越高表示越重要 评分越高 注意 IDF
  • 震惊,微信小程序可以设置网络字体!真香

    准备工作 获取字体链接 还原设计稿的时候需要用到如下特殊字体 google 的 Montserrat https fonts google com specimen Montserrat 选择这个字体 下载全部字体 将本地的字体文件上传到自
  • 【Kubernetes系列】Workloads(工作负载)

    文章目录 概述 工作负载资源 工作负载生命周期 概述 工作负载是在 Kubernetes 上运行的应用程序 在 Kubernetes 中 无论你的负载是由单个组件还是由多个一同工作的组件构成 你都可以在一组 Pod 中运行它 在 Kuber
  • 手把手教你搭建一台永久运行的个人服务器

    No 1 树莓派是什么 1 用我的话理解 2 市面上的型号 3 树莓派 zero w 4 更多树莓派 No 2 树莓派zero w安装系统 1 准备 2 第一步下载系统镜像 3 使用 Win32DiskImager 往内存卡中写入镜像 4
  • 2023华为OD机试真题【对称美学/递归】

    对称就是最大的美学 现有一道关于对称字符串的美学 已知 第1个字符串 R 第2个字符串 BR 第3个字符串 RBBR 第4个字符串 BRRBRBBR 第5个字符串 RBBRBRRBBRRBRBBR相信你已经发现规律了 没错 就是第i个字符串
  • HTML06:表格标签

    表格 table 会使用 存在即是合理的 表格的现在还是较为常用的一种标签 但不是用来布局 常见处理 显示表格式数据 创建表格 在HTML网页中 要想创建表格 就需要使用表格相关的标签 创建表格的基本语法格式如下 table tr td 单
  • PDU学习笔记--包括长短信的发送

    使用PDU模式 包含UDH头信息分割短信 用户数据头UDH 00表示长短信拆分 贴一个转来的PDU学习笔记 网上收藏的 关于PDU其实并不难 至于PDU是什么 不管它 爱是什么是什么 我们只要知道怎么用就可以了 在网上看了很多关于PDU的帖
  • 用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)

    1 NFS介绍 NFS Network File System 是网络文件系统 和img镜像格式的文件系统一样都是文件系统 区别在于NFS是通过网络挂载 镜像格式的文件系统必须先烧录到硬盘后才能挂载 NFS采用C S架构 客户端通过网络去挂
  • react 关于textarea文本框前面固定的几个字保证不被删除的简单实现

    一 主要是在textarea antd的TextArea组件也可以这么使用 参数中加上disable参数和onKeyDown参数 disabled rtnTxtDisabled onKeyDown e gt const targetStr
  • OMP算法笔记

    OMP算法笔记 OMP算法整理 以备自己后期查阅 集合了几篇博主的文章 1 数理知识基础 投影矩阵 详见 作者 nineheaded bird 来源 CSDN 原文 https blog csdn net tengweitw article
  • sudo java not found_ubuntu终端sudo java提示“command not found”解决办法

    我在ubuntu 12 04里想启动一个java程序 sudo java jar xxx jar 但是结果提示sudo java command not found Ubuntu下用sudo运行java程序时 要注意此时用户目录为 root
  • python单元测试:unittest

    1 unittest 简介 unittest是python内置的用于测试代码的模块 无需安装 使用简单方便 unittest case的运行流程 写好一个完整的TestCase 多个TestCase 由TestLoder被加载到TestSu

随机推荐

  • 【雷达原理】基本雷达方程的推导

    基本雷达方程 一 研究目的 二 推导过程 1 基本雷达方程常用的表达形式 2 计算案例 3 仿真代码 参考文献 一 研究目的 雷达方程定量地描述了作用距离与雷达参数及目标特性之间的关系 研究雷达方程主要有以下作用 1 根据雷达参数来估算雷达
  • Flutter CustomScrollView要点

    在上篇文章中我们学了SingleChildScrollView这个滑动控件 现在我们学习一下CustomScrollView这个控件 CustomScrollView这个控件是针对多个滚动布局的组件 比如顶部一个GridView 底部又来一
  • pycharm连接远程服务器,报错No such file or directory

    参考文章 pycharm远程连接服务器运行代码加调试 解决 1 2 是因为映射路径与服务器上执行文件的路径不符导致的上述错误 在第二步中将Deployment path 改为服务器上要执行文件的相应路径即可
  • tsconfig.json编译选项配置说明

    incremental 增量编译 默认在 composite为true的为true 否则false 语言和环境 target 编译目标 默认 es3 reactNamespace react的命名空间 默认React lib TypeScr
  • 时钟抖动(Clock Jitter)和时钟偏斜(Clock Skew)

    系统时序设计中对时钟信号的要求是非常严格的 因为我们所有的时序计算都是以恒定的时钟信号为基准 但实际中时钟信号往往不可能总是那么完美 会出现抖动 Jitter 和偏移 Skew 问题 所谓抖动 jitter 就是指两个时钟周期之间存在的差值
  • TMS系统

    运输管理系统 Transportation Management System 英文缩写 TMS 是一种 供应链 分组下的 基于网络的 操作软件 它能通过多种方法和其他相关的操作一起提高物流的管理能力 包括管理装运单位 指定企业内 国内和国
  • OpenCV-Python 图像平滑处理2:blur函数及滤波案例

    一 图像平滑处理简介 图像平滑处理的基本概念非常直观 它使用滤波器模板确定的邻域内像素的平均 加权平均灰度值代替图像中每个像素的值 平滑线处理滤波器也称均值滤波器 所有系数都相等 非加权平均 的空间均值滤波器也称为盒状滤波器 在 OpenC
  • Docker不香吗?为什么还要用k8s

    本文禁止转载 目录 容器化时代来了 容器化技术的尖刀武器 Docker 横空出世 Docker怎么用 编排系统的需求催生 k8s k8s与Docker Swarm江湖恩怨 k8s是做什么用的 K8s 架构和组件 Docker与k8s 难舍难
  • oracle数据库中有哪些时间类型?

    1 date类型 用于存储 年月日时分秒 在数据库中 固定存储为7个字节 2 timestamp类型 除了保存 年月日时分秒 还有小数秒 小数秒默认6位 例如 timestamp 6 表示秒的小数点后面 可以存储6位数字 3 区别 通常在数
  • 【论文评审】怎样审稿?

    文章目录 说明 翻译 整理后的内容 英文原版内容 说明 本博客素材来源于网址 http web njit edu bieber review html 内容为英文 可以打开上述网页后在网站上翻译着看 本博客对上述网页内容进行翻译整理 翻译
  • 浅谈C语言中断处理机制

    一 中断机制 1 实现中断响应和中断返回 当CPU收到中断请求后 能根据具体情况决定是否响应中断 如果CPU没有更急 更重要的工作 则在执行完当前指令后响应这一中断请求 CPU中断响应过程如下 首先 将断点处的PC值 即下一条应执行指令的地
  • 查找 综述类文献

    转自http blog sina com cn s blog 4ded56360100wlwo html 查找 综述类文献 的方法有三种 第一种 直接用内容关键字 overview survey 这样的词 在各大数据库 google中直接搜
  • (转)Spring项目整合MyBatis-Plus

    目录 1 简介 2 项目整合 2 1 MyBatis的配置 2 2 MyBatis Plus配置 1 简介 MyBatis Plus 是基于Mybatis的一个工具 它是对MyBatis的增强 在其基础上只进行增强 不进行改变 是为了简化M
  • 直流无刷电机(BLDC)的相电流和反电动势是同相的吗?

    在直流无刷电机中 电机转子上的永磁体与定子上的线圈之间存在磁场相互作用 当定子上的线圈被通电时 会产生一个旋转磁场 这个旋转磁场与转子上的永磁体磁场相互作用 从而使得转子开始旋转 同时 在直流无刷电机中 当转子旋转时 会在定子上的线圈中感应
  • ElementUI给表格加上输入框和单位

    关键代码 可以使用判断的语句进行判断添加
  • 垃圾回收机制

    Garbage Collection简称为GC 垃圾回收 工作原理 当程序员创建对象时 GC就开始监视这个对象地址 大小以及使用情况 通常GC采用有向图的方式记录并管理堆中的对象 通过这种方式确定哪些对象是可达的 哪些是不可达的 当确定对象
  • Netty源码------Pipeline详细分析

    Netty源码 Pipeline详细分析 目录 Netty源码 Pipeline详细分析 1 Channel 与ChannelPipeline 2 再探ChannelPipeline 的初始化 3 ChannelInitializer 的添
  • 达梦数据库备份:备份目录冲突.

    备份之前需要先配置归档 其中有一个归档路径 它的作用就是存放归档日志 现在是备份 备份的文件存放地方 不能房这个路径的
  • 云服务器创建虚拟机,云服务器能创建虚拟机吗

    云服务器能创建虚拟机吗 内容精选 换一换 在专属主机资源上创建云服务器失败 可能由以下原因造成 您所选择的云服务器规格不在您已有的专属主机支持范围内 各类型专属主机支持的云服务器规格请参见概述 各类型专属主机支持的云服务器规格请参见概述 您
  • 如何在多个iOSapp里共享数据

    转自 http evgenii com blog sharing keychain in ios 如有侵犯 请来信oiken qq com 使用了KeyAccess这个第三方库保存UUID 原来设计是用了access group 可以多个a