shell脚本进行应用重签名
Shell是一种特殊的交互式工具,它为用户提供了启动程序、管理文件系统中文件以及运行在系统上的进程的途径。命令行工具。它允许你输入文本命令,然后解释命令,并在内核中执行。脚本文件。立即影响当前的环境(一般用于加载配置文件)。source 123.sh ,会进入shell目录,停留在脚本执行完后的目录bashFileName+ zsh FileName建立一个子shell,在子shell中执行脚本里面的句子。zsh/bash 123.sh -- 不会进入目录,停留在当前目录
<!--123.sh中包含-->mkdir shell
cd shell
touch 123.txt/FileNamechmod +x 123.sh : 赋予可执行权限
./123.sh : 执行shell文件,且停留在当前目录前提,脚本文件需要有可执行权限。
bash : macOS默认的shell,仅在MacOS Serialzsh : 现在MacOS默认的shell/ :让每一个人拥有一块自己独立的区域去做事情
/home:是用户/usr:是系统资源
10位字符,文件类型+3组文件权限(其位置不会变,如果出现减号(-)在对应的位置,表示没有此权限)
drwxr-xr-xd : 文件类型(d 目录、- 文件)rwx : 文件所有者的权限r-x : 这一组其他用户的权限r-x : 非本组用户的权限chmod命令。设置方法有两种:数字类型改变 和 符号类型改变。[user]+[group]+[other][read] + [write] + [execute]
r:0100 w:0010 x:0001r:4 w:2 x:1(分别是1,1左移1位,1左移2位)chmod 755 文件名(777 -- rwxrwxrwx)
chmod [u、g、o、a][+(加入)、-(除去)、=(设置)] [r、w、x] 文件名称,其中 - `g` :表示group
- `o` :表示other
- `a` :表示allu :表示user
codesign和xcode重签名,我们还可以直接使用shell脚本进行自动重签名Build Phase -> + Run Script,会在编译时执行./ 表示工程目录SRCROOT (环境变量)-- 根目录touch 123.shchmod +x 123.sh./123.shIPA到Temp下删除extension和WatchAPP,因为个人证书没法签名Extention更新info.plist文件 CFBundleIdentifierMach-O文件上执行权限FrameWorks# ${SRCROOT} 它是工程文件所在的目录TEMP_PATH="${SRCROOT}/Temp"#资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包ASSETS_PATH="${SRCROOT}/APP"#目标ipa包路径TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"#清空Temp文件夹rm -rf "${SRCROOT}/Temp"mkdir -p "${SRCROOT}/Temp"#----------------------------------------# 1\. 解压IPA到Temp下unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"# 拿到解压的临时的APP的路径TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")# echo "路径是:$TEMP_APP_PATH"#----------------------------------------# 2\. 将解压出来的.app拷贝进入工程下# BUILT_PRODUCTS_DIR 工程生成的APP包的路径# TARGET_NAME target名称TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"echo "app路径:$TARGET_APP_PATH"rm -rf "$TARGET_APP_PATH"mkdir -p "$TARGET_APP_PATH"cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"#----------------------------------------# 3\. 删除extension和WatchAPP.个人证书没法签名Extentionrm -rf "$TARGET_APP_PATH/PlugIns"rm -rf "$TARGET_APP_PATH/Watch"#----------------------------------------# 4\. 更新info.plist文件 CFBundleIdentifier# 设置:"Set : KEY Value" "目标文件路径"# PlistBuddy工具修改info.plist文件中的BundleID为工程的BundleID/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"#----------------------------------------# 5\. 给MachO文件上执行权限# 拿到MachO文件的路径APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`#上可执行权限chmod +x "$TARGET_APP_PATH/$APP_BINARY"#----------------------------------------# 6\. 重签名第三方 FrameWorksTARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];thenfor FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*do#签名 #--force --sign 替换签名# EXPANDED_CODE_SIGN_IDENTITY 当前工程的证书/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"donefi作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)
source FileName:读取并执行FileName中的命令,会立即影响当前环境,且停留在脚本执行后的目录bash/zsh FileName:重新建立一个子shell,在子shell中执行FileName中的命令,且停留在当前目录./FileName:读取并执行FileName中的命令,前提是./FileName需要由可执行权限(即 x)数字类型改变:例如 chmod 755 文件名符号类型改变:例如 chmod a+x 123.txtu :表示userg :表示groupo :表示othera :表示alld: 目录-:文件IPA到Temp下删除extension和WatchAPP,因为个人证书没法签名Extention更新info.plist文件 CFBundleIdentifierMach-O文件上执行权限FrameWorks对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub