EDIT:
Według @Abhinav Gujjar kwestia powodując cordova prepare
nadpisać ręcznych zmian dokonanych w ustawieniach orientacja w .plist został naprawiony. Jednak AFAIK nadal nie ma możliwości ustawienia różnych preferencji orientacji dla iPada i iPhone'a w pliku config.xml, więc poniżej znajduje się odpowiedź.
UPDATE:
stworzyłem wtyczkę cordova-custom-config, który owija się haczyk poniżej i oznacza bloki zwyczaj konfiguracyjne specyficzne dla platformy (takie jak te ustawienia orientacyjnie) można zdefiniować w config.xml. Możesz więc użyć wtyczki zamiast ręcznie tworzyć hak poniżej.
Zostało to wprowadzone w Cordova 5.0.0 CLI - see here.
W międzyczasie używam haka after_prepare jako obejścia. Wystarczy umieścić następujące w <your_project>/hooks/after_prepare/some_file.js
i zmienić ustawienia orientacji odpowiednio:
#!/usr/bin/env node
// Set support for all orienations in iOS .plist - workaround for this cordova bug: https://issues.apache.org/jira/browse/CB-8953
var platforms = process.env.CORDOVA_PLATFORMS.split(',');
platforms.forEach(function(p) {
if (p == "ios") {
var fs = require('fs'),
plist = require('plist'),
xmlParser = new require('xml2js').Parser(),
plistPath = '',
configPath = 'config.xml';
// Construct plist path.
if (fs.existsSync(configPath)) {
var configContent = fs.readFileSync(configPath);
// Callback is synchronous.
xmlParser.parseString(configContent, function (err, result) {
var name = result.widget.name;
plistPath = 'platforms/ios/' + name + '/' + name + '-Info.plist';
});
}
// Change plist and write.
if (fs.existsSync(plistPath)) {
var pl = plist.parseFileSync(plistPath);
configure(pl);
fs.writeFileSync(plistPath, plist.build(pl).toString());
}
process.exit();
}
});
function configure(plist) {
var iPhoneOrientations = [
'UIInterfaceOrientationLandscapeLeft',
'UIInterfaceOrientationLandscapeRight',
'UIInterfaceOrientationPortrait',
'UIInterfaceOrientationPortraitUpsideDown'
];
var iPadOrientations = [
'UIInterfaceOrientationLandscapeLeft',
'UIInterfaceOrientationLandscapeRight',
'UIInterfaceOrientationPortrait',
'UIInterfaceOrientationPortraitUpsideDown'
];
plist["UISupportedInterfaceOrientations"] = iPhoneOrientations;
plist["UISupportedInterfaceOrientations~ipad"] = iPadOrientations;
}
Uwaga: trzeba zainstalować moduły plist i xml2js węzłów, jeśli nie masz ich.
To rozwiązanie sprawdza się doskonale Dave. Na początku zainstalowałem plist i xml2js bez sudo i miałem problemy. Po odinstalowaniu obu i ponownym zainstalowaniu za pomocą sudo wszystko działało idealnie.Dzięki jeszcze raz. – sdesapio