動態生成ios plist的方法

codecraft發表於2017-02-13

freemarker模板

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>${ipaDownloadUrl}</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>${identifier}</string>
                    <key>bundle-version</key>
                    <string>${version}</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>subtitle</key>
                    <string>${subtitle}</string>
                    <key>title</key>
                    <string>${title}</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

controller

    @RequestMapping(value = "/plist/{id}",method = RequestMethod.GET)
    public void plist(HttpServletResponse response,@PathVariable String id) throws IOException, TemplateException {
        
        Map<String,Object> data = new HashMap<>();
        //put variables
        //....
        //convert to string
        String content = FreemarkerUtil.generateContent("plist.ftl",data);
        response.setHeader("Content-Type", "application/octet-stream; charset=utf-8");
        response.setHeader("Content-Disposition",
                "attachment;filename=app.plist");
        response.getWriter().write(content.toCharArray());
    }

下載頁面

參考二維碼app下載方案

對於這個plist的介面,如果不是PathVariable的引數,而是RequestParam這種,通過itms-services無法傳送對plist的請求,後來把引數都改為經過PathVariable才可以。

itms-services://?action=download-manifest&url=https://xxxxxx/plist/xxxxx

doc

相關文章