4

我有一个 .ipa 文件(iOS 应用程序),我让用户临时安装(在私人服务器上通过无线方式,使用企业帐户)。

挑战是应用程序在应用程序之间有所不同。他们在应用程序中使用不同的徽标和不同的网址。

是否可以在人们下载之前动态更改我服务器上的 .ipa 文件?

进一步说明:

我必须强调,我不能为每个应用程序制作一个 .ipa 文件。我必须能够更改开始屏幕、徽标并为单个 .ipa 文件设置 url 变量。

换句话说,每次有人想要下载它时,我都需要动态更改服务器上的 .ipa 文件。

我想拥有的:

我很想有一个关于如何在 heroku 或亚马逊服务器上执行此操作的示例/指南。没有什么花哨。基本上只是更改 info.plist 中的一个变量,然后再对其进行重新设计。

4

3 回答 3

9

如前所述,您可以简单地解压缩并再次压缩以创建自己的 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 个字符的文件名长度。

您还需要一些代码来动态地将空目录添加到 ipa下Payload/yourapp.app/extra/,以百分比编码的消息作为其文件名,例如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 将堆积在/extra/ipa 内。

于 2013-07-27T06:53:59.157 回答
3

我认为您可以将Jenkins Build 用于此类需求。只需在构建操作之前更改您的资源。它会生成新的 ipa

logo,
Splash,
App_Identifier,
App_DisplayName,
甚至可以更改的产品名称。

在执行构建操作之前,可以用一些 php 脚本替换 logo 和 splash。

对于 App_Identifier、App_DisplayName、Product Name,您可以使用

Config.xcconfig文件

对于 config.xcconfig 看这个链接

对于前。查看我的 Config.xcconfig 文件信息

appDisplayName=My App
appIdentifier=org.myComp.myApp
productName=katWalk

我采用插入值的变量。

更改产品名称 Go-> Build Settings->Packaging -> Products

并将该变量名称与大括号后面跟着美元($)符号作为

在此处输入图像描述

更改 App_Identifier 和 app_DisplayName 转到 -> App-Info.plist 文件并将变量名称更改为

在此处输入图像描述

现在您需要在构建之前更改 config.xcconfig 文件中的变量值,您的应用程序将准备好使用新徽标、Splash、标识符、显示名称和新产品名称。

愿这对你有帮助

于 2013-07-27T06:12:50.657 回答
1

是的,使用 PHP、Python、Ruby 或任何其他服务器端语言,您可以创建处理 .ipa 和 .plist 请求的路由。当这些进入您的服务器端程序时,您的服务器端程序可以确定为该 URL 提供哪个 ipa 和 plist。

将所有 IPA 及其信息存储在数据库中可能很有用,这将允许您的脚本在运行时生成完全生成的 plist。

于 2013-07-18T02:35:13.273 回答