Ich mache das in meiner Cordova App und hatte keine Probleme mit der IOS App Store Review.
Ich benutze Jquery's Ajax-Funktion, um sowohl eine Javascript- als auch eine CSS-Datei von einem Server herunterzuladen, die ich ohne App-Store-Genehmigung ändern kann und dann kann ich diese Skripte injizieren, sobald sie beim App-Start heruntergeladen wurden.
Ich habe versucht, die Cordova File API zu verwenden, und ich würde dann die Datei lokal speichern, aber Offline-Unterstützung ist nicht wichtig für mich im Moment und Jquery Ajax ist viel einfacher.
Hier ist der Jquery-Code, den ich verwende. Ich habe eine Bundle-ID, mit der ich feststellen kann, ob eine neue Javascript-Datei verfügbar ist, ansonsten speichert Jquery's Ajax die vorherigen Anfragen, um die Download-Zeit zu beschleunigen.
Mit dieser Lösung können Sie eine Teilmenge Ihres Codes dynamisch gestalten. Ich habe immer noch einen Basissatz von Code, der mit der App gebündelt ist, zusammen mit nativem Plugin js und nativem Code, der durch den App Store gehen müsste. Aber das lässt mich Bugfixes pushen, ohne den App Store zu durchlaufen.
Ansonsten würde ich auf eine Lösung wie folgt aussehen: http://docs.build.phonegap.com/en_US/tools_hydration.md.html
function insertScript(version) {
var scriptUrl = "";
try {
// get javascript file...
scriptUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Scripts/dynamic";
scriptUrl += "_" + bundleVersion.replace(/\./g, "_") + ".js?v=" + version;
console.log("downloading script: " + scriptUrl);
// Allow user to set any option except for dataType, cache, and url
options = {
dataType: "script",
cache: true,
url: scriptUrl
};
// Use $.ajax() since it is more flexible than $.getScript
// Return the jqXHR object so we can chain callbacks
return $.ajax(options).success(function(response) {
console.log("insertScript success");
dynamicContentScriptLoaded = true;
});
} catch (e) {
//console.error(e);
ReportError("problem downloading javscript: " + scriptUrl);
}
}
function insertCSS(version) {
try {
// get css file...
var cssUrl = mobileWebServiceUrl + "/DynamicContent/Bundles/Css/dynamic";
cssUrl += "_" + bundleVersion.replace(/\./g, "_") + ".css?v=" + version;
console.log("downloading dynamic css: " + cssUrl);
$.ajax(cssUrl)
.success(function (response) {
console.log("successfully downloaded dynamic css");
var script = document.createElement("style");
script.type = "text/css";
script.innerHTML = response;
$('head link').each(function() {
if ($(this).attr('href').search('MobileFrame') > -1) {
$("#MobileFrameCSS").before(script);
}
});
dynamicContentCssLoaded = true;
// TODO: implement caching at a later date
//if (isPhoneGap())
// saveFile("DynamicStyles", response);
});
} catch (e) {
ReportError("problem downloading css");
}
}
Sie sollten sich wahrscheinlich ein oder zwei Minuten Zeit nehmen, um die Lizenzvereinbarung für Ihr iOS-Entwicklerprogramm zu lesen. Was Sie vorschlagen, ist keine neue Idee, aber es passiert nicht, weil es eine Verletzung Ihrer Vereinbarung mit Apple ist. – sherb
Aber ich kenne einige Spiele, die regelmäßig Updates abrufen. Verstoßen sie auch gegen das Abkommen? – 23tux
* Inhalt * Updates sind zulässig, ausführbarer Code jedoch nicht. Es gibt einen Unterschied zwischen Code und Inhalt, der in manchen Fällen unscharf ist. Ich bin kein Anwalt, aber als Mitentwickler rate ich nur zur Vorsicht. Viel Glück! – sherb