ios – 检查应用程序是否是ad-hoc | dev | app-store在运行时构建

我想在调试屏幕中查看构建信息.有没有办法在运行时检查这个?

我意识到我可以为构建或类似设置编译器标志,但是如果存在可以利用的现有方法,我想利用这一点.

解决方法

虽然我同意Abhi Beckert,运行时是错误的时间来做(使用预处理指令和构建设置!),我想澄清一些在前面的答案/评论的细节和猜测,并发光一些你的事情可以做.与我同在,这将是一个更长的答案…

有一堆数据可以在“构建信息”的通用伞下.这些事情的非详尽列表将包括:构建配置,代码签名身份,构建时间,构建日期,营销版本号,SCM版本号,SCM分支名称,配置配置文件组标识,配置配置文件过期,CI构建号.这个名单一直在继续.

假设您的问题目前狭窄地集中在获取有关构建iOS用户类型和配置配置文件的信息,那么我将不得不以非常坚定的“否”作为问题的答案:是否有在运行时检查[使用现有API方法构建信息]的方法?简而言之,这两个数据点在Xcode 4.6.x Build Settings或“CODE_SIGN_IDENTITY”中被称为“Code Signing Identity”,用于您的命令行构建设置爱好者.

在提出此问题的时候,您没有可以调用的单一的公共iOS API来获取有关当前正在运行的应用程序的代码签名类型的信息.这背后的可能原因很多,但下面是几个例子:

允许开发人员构建自己的构建方案并构建配置.这意味着我们可以有一个方案和一个构建配置,或一个方案和几十个构建配置,甚至每个配置数千个.自然地,可以为每个方案分配不同的构建配置,并且可以为每个配置分配不同的代码签名身份.您可能会猜到,开发人员或团队不需要太多的自定义来快速获得混乱.
>代码签名标识仅要求为当前应用程序标识符发出未过期的配置配置文件,其中包含用于对二进制文件进行签名的证书的公用密钥副本.对于在团队中工作的人员,您可能有一个配置配置文件,其中包含团队中开发人员的所有证书,或者您可以为仅包含其证书的团队中的每个开发人员设置单独的配置配置文件.这是开发人员如何选择构建应用程序的另一个变化点.
>开发人员可能会分享单一证书(tsk tsk),或者发行自己的证书…是的,你猜到了,更多的变化.

然后,这个假设的一站式API将需要在运行时访问所有的构建配置数据,证书和配置配置文件,以便能够解开在编译时应用的“有效”设置,并将所有数据减少到有限的字符串…只是为了开发人员诊断视图…通过任何想象力不是不可能的壮举,但是对于可忽略的开发人员利益而言,这样一个潜在的计算密集型操作肯定会在任何人的优先级列表中排名很低.鉴于其他选项(如编译时标志!)更可靠,更便宜的设置,并且从长远来看更易于维护,它将进一步降低优先级列表.

现在,关于“我可以在运行时能做到”的半潜伏问题吗?我会强调说“是的,你可以”.

如你所知,设备构建是唯一需要代码签名的构建.该过程的一部分在主包中创建一个名为“embedded.mobileprovision”的文件.这是您的应用程序的沙箱拥有的文件,因此您绝对有能力以编程方式打开:

[[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil]

.mobileprovision文件是PCKS#7编码的,并且包含二进制和文本数据.您寻求的信息是嵌入在PCKS#7数据中的基于文本的plist.首先,使用OS X,我们来看看您的一个设备构建中的这些文本数据:

>右键单击您的构建设备.app包,然后选择“显示包内容”
>将embedded.mobileprovision文件复制到一个容易访问的地方.
>使用首选文本编辑器打开该文件.

您马上注意到有很多二进制数据,但您可以制作出部分文本数据.滚动到右边,你会看到plist风格的xml,只是在这个视图中看起来不是那么容易.我们可以使用OS X命令行工具以更有条理的方式查看这些数据:

>打开终端和’cd’到包含您的embedded.mobileprovision副本的文件夹.
>运行:security cms -D -i embedded.mobileprovision

这将显示plist xml到终端窗口,以便您以良好的标签格式进行阅读.如果您重复此过程进行Ad-Hoc构建,Dev构建和App Store构建,那么您将开始注意到本文中的键,表示各种类型的构建.对于使用“iPhone开发人员:…”证书签名的构建(或“Dev”按原始帖子列出的方式构建),请查找:

<key>get-task-allow</key>
<true/>

“get-task-allow”键是用来指示iOS的应用程序将允许调试器附加到它.在“iPhone开发人员”签名的二进制文件的情况下,这是有道理的 – 当将代码从Xcode推送到您的设备进行测试时,您通常需要在设备上进行调试.

“Ad-Hoc”和“App Store”之间的差异需要额外的检查.对于这两种类型的分发,这个相同的“get-task-allow”键将被设置为false:

<key>get-task-allow</key>
<false/>

然而,“Ad-Hoc”版本的“App Store”构建中没有定义的“ProvisionedDevices”集合:

<key>ProvisionedDevices</key>
<array>
    <string>abcdef01234567890abcdef01234567890abacde</string>
    <string>1abcdef01234567890abcdef01234567890abacd</string>
    <string>2abcdef01234567890abcdef01234567890abacd</string>
</array>

那么运行时检查问题在实际中是什么意思呢?是的,您可以通过从主包中打开embedded.mobileprovision文件,并从中解析出数据,做出明智的决定,但这是您将完全负责实现自己的事情.您需要添加逻辑来处理该文件丢失的情况(例如模拟器构建),并解析PCKS#7数据或可靠地提取文件的ASCII内容,您的代码可以运行一系列字符串搜索.可能显而易见的是,这将需要非常简单的方法来解决一个有点脆弱的解决方案,否则可以通过构建设置和预处理器宏来容易地适应上述答案中所述的Abhi Beckert.

App Store拒绝的风险如何?这是“非法”还是“颠覆”?

假设您在阅读和解析embedded.mobileprovision文件的内容时使用所有公共API,这完全可以通过App Store的当前条款.您的应用程式沙箱中的任何内容都是公平的游戏,包括embedded.mobileprovision,如果它恰好存在.我仍然强烈警告不要走这条路,回应Abhi Beckert的意见.对于不到1%的使用案例来说,这是相当多的努力,而且有更容易的解决方案!此外,开发人员诊断视图不应该在App Store发布版本中,但是包含无关代码的决定完全在您的手中.

我希望这清除任何留下的问题,但如果没有,请抛出一个评论,我们可以看到我们能做什么.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。