Ios 动态更改服务器上的.ipa文件
我有一个.ipa文件(iOS应用程序),我允许用户临时安装(使用企业帐户在私有服务器上通过无线方式) 挑战在于,应用程序在不同的应用程序中有所不同。他们在应用程序中使用不同的徽标和url 在人们下载之前,是否可以动态更改服务器上的.ipa文件 进一步解释:Ios 动态更改服务器上的.ipa文件,ios,objective-c,iphone,Ios,Objective C,Iphone,我有一个.ipa文件(iOS应用程序),我允许用户临时安装(使用企业帐户在私有服务器上通过无线方式) 挑战在于,应用程序在不同的应用程序中有所不同。他们在应用程序中使用不同的徽标和url 在人们下载之前,是否可以动态更改服务器上的.ipa文件 进一步解释: $ mkdir -p Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F $ zip -r myapp.ipa Payload/ updating: Payload/ (stor
$ mkdir -p Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F
$ zip -r myapp.ipa Payload/
updating: Payload/ (stored 0%)
updating: Payload/myapp.app/ (stored 0%)
updating: Payload/myapp.app/extra/ (stored 0%)
adding: Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F/ (stored 0%)
$ rm -r Payload/
我必须强调,我不能为每个应用程序创建.ipa文件。我必须能够改变开始屏幕,标志和设置一个单一的.ipa文件的url变量
换句话说,每当有人想要下载.ipa文件时,我需要动态地更改服务器上的.ipa文件
我想要的:
$ mkdir -p Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F
$ zip -r myapp.ipa Payload/
updating: Payload/ (stored 0%)
updating: Payload/myapp.app/ (stored 0%)
updating: Payload/myapp.app/extra/ (stored 0%)
adding: Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F/ (stored 0%)
$ rm -r Payload/
我希望有一个示例/指南,说明如何在heroku或amazon服务器上执行此操作。没什么特别的。基本上只需在info.plist中更改一个变量,然后再对其进行代码设计。是的,使用PHP、Python、Ruby或任何其他服务器端语言,您可以创建一个处理.ipa和.plist请求的路由。当这些信息出现在服务器端程序中时,可以确定为该URL提供哪个ipa和plist 将所有ipa及其信息存储在数据库中可能很有用,这将允许您的脚本在运行时生成完整的plist。我认为您可以使用Build来满足此类需求。只需在Build操作之前更改您的资源。它将使用新的 标志,
飞溅,
应用程序标识符,
应用程序显示名称,
甚至产品名称也可以更改 在执行构建操作之前,可以用一些php脚本替换徽标和splash 对于App\u标识符,App\u DisplayName,您可以使用的产品名称 Config.xcconfig文件 有关config.xcconfig,请参见 有关示例,请参见my Config.xcconfig文件信息
appDisplayName=My App
appIdentifier=org.myComp.myApp
productName=katWalk
我取插入值的变量
要更改产品名称,请转到->构建设置->打包->产品
将变量名与大括号和美元($)符号放在一起,如下所示
要更改App_标识符和App_DisplayName,请转到->App-Info.plist文件并将变量名称更改为
现在,您需要在构建之前更改config.xcconfig文件中的变量值,您的应用程序将准备好新徽标、飞溅、标识符、显示名称和新产品名称。
这可能会帮助您正如前面所述,您只需重新解压缩即可创建自己的ipa 您还需要添加一些不需要代码签名的资源 最好是在ipa中创建一个新的(空)目录。目录本身没有签名,但在设备上提取,并且可以被代码检测到 换句话说:添加空目录时,包含签名的
CodeResources
文件不会更改
我刚刚做的一个简单测试是创建一个文件夹引用一个名为“extra”的文件夹,该文件夹的内容使用百分比编码解码并显示在弹出窗口中:
NSString *path = [[NSBundle mainBundle] pathForResource:@"extra" ofType:@""];
NSDirectoryEnumerator *direnum = [[NSFileManager defaultManager] enumeratorAtPath:path];
NSString *f;
while (f = [direnum nextObject])
{
NSString *decoded = [f stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:decoded delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
[alert show];
}
这可用于向代码发送潜意识消息。百分比编码允许您输入您喜欢的任何字符。我测试了100个字符的文件名长度
您还需要一些代码来动态地将Payload/yourapp.app/extra/
下的空目录添加到ipa,并将百分比编码消息作为其文件名,例如Payload/yourapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F
更新:将目录添加到ipa的shell命令示例:
$ mkdir -p Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F
$ zip -r myapp.ipa Payload/
updating: Payload/ (stored 0%)
updating: Payload/myapp.app/ (stored 0%)
updating: Payload/myapp.app/extra/ (stored 0%)
adding: Payload/myapp.app/extra/http%3A%2F%2Fstackoverflow.com%2F/ (stored 0%)
$ rm -r Payload/
当然,您每次都需要创建一个干净的ipa副本,否则URL将堆积在ipa内部的
/extra/
下。回答得很好。我知道你要去哪里。但这并不是一个很好的解决方案。我试着在上面解释得更好一些。@Holgeredawardlowsindbæk啊,我明白了-不,我明白服务器不可能有条件地编译多个ios应用程序。也许可选功能是运行时?主要功能是运行时(它基本上是一个从一个应用到另一个应用的链接),但我不知道如何动态更改此链接。如果我能以某种方式动态设置链接,那就太棒了。你能看到这样做的可能性吗?那可能是一个解决办法。所以你建议简单地命名文件夹,我要更改的url的名称?它必须是一个文件夹吗?有一件事我还不清楚,那就是如何在我的实际服务器(Heroku或Amazon S3)上压缩/解压我的.ipa。没错,它必须是一个文件夹,以避免代码签名。我在答案中添加了一个小的shell脚本,展示了如何将文件夹添加到zip存档。非常好。这可能是一个真正的解决方案。我还可以替换我的一些资产吗?我有一个标志(图像),我想改变。还是需要我重新编码签名?如果负载在Heroku或Amazon S3服务器上,您将如何运行这样的脚本?我不知道Heroku或Amazon,这是一个不同的主题,适合单独的问题。我认为,如果不重新进行代码签名,就不可能替换/删除/添加资产。你可以用目录名对图像的实际数据进行编码,但这需要相当繁琐的编程。我已经用iOS 7.1对它进行了测试,它仍然在工作。听起来像是一个选项。不过我不知道怎么和詹金斯一起做。我对詹金斯不太熟悉。记住,所有这些都必须在线自动完成。因此,用户案例是有人进入mywebsite.com/they_personal_site/iPhone_应用程序并单击“下载”。在那一刻(或当个人网站制作完成时),新的应用程序应该准备好了。是的,我使用jenkins build制作了一个类似的应用程序,并更改了我上面提到的以下内容。用户上传了他的splash和logo,并通过php或其他我们需要的脚本