动态更改服务器上的.ipa文件

时间:2013-07-17 22:50:04

标签: ios objective-c iphone

我有一个.ipa文件(iOS应用),我让用户安装ad-hoc(在私人服务器上使用企业帐户进行无线播放)。

挑战是应用程序从应用程序到应用程序的区别。他们在应用程序中使用不同的徽标和不同的URL。

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

进一步说明:

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

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

我希望拥有的内容:

我希望有一个关于如何在heroku或amazon服务器上执行此操作的示例/指南。没有什么花哨。基本上只是更改info.plist中的变量,然后再对其进行编码。

3 个答案:

答案 0 :(得分:8)

如前所述,您只需简单地解压缩并拉链以创建自己的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副本,否则网址会在ipa内的/extra/下堆积。

答案 1 :(得分:3)

我认为你可以使用Jenkins Build来满足这种类型的需求。只需要在构建动作之前更改你的资源。它将生成带有新的ipa

标志,
飞溅,
App_Identifier,
App_DisplayName,
甚至可以更改产品名称。

在执行构建操作之前,

logo和splash可以被一些php脚本替换。

对于App_Identifier,App_DisplayName,您可以使用产品名称

Config.xcconfig 文件

对于config.xcconfig,请查看this link

对于Ex。请参阅我的Config.xcconfig文件信息

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

我接受插入值的变量。

要更改产品名称Go->构建设置 - >包装 - >产品

并将该变量名称alog与大括号后跟$($)符号作为

enter image description here

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

enter image description here

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

愿这会对您有所帮助

答案 2 :(得分:1)

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

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