2015-06-15 1 views
5

Mit Cordova 5.1.1 werden beim Ausführen von "cordova build ios" alle zuvor im XCode-Projekt ausgewählten Geräteorientierungseinstellungen gelöscht, ohne dass die Kontrollkästchen für die Orientierungseinstellungen deaktiviert sind.Befehl Cordova 5 build löscht Einstellungen für iOS-Geräteausrichtung

Während die Konfig-Einstellung "Ausrichtung" ein Mittel zur Erzwingung der Orientierung bieten kann, muss ich verschiedene Orientierungseinstellungen für das iPad und iPhone vornehmen können.

Alle vorherigen Cordova-Versionen (unter 5) erfüllten diese Einstellungen. Irgendwelche Ideen?

Verwenden von XCode 6.3.2.

Antwort

4

EDIT:

@Abhinav Gujjar Nach dem Problem verursacht cordova prepare manuelle Änderungen an Orientierung Einstellungen im .plist fixiert wurde gemacht, zu überschreiben. Wie auch immer, es gibt immer noch keine Möglichkeit, in der Datei config.xml verschiedene Orientierungseinstellungen für iPad und iPhone vorzunehmen.

UPDATE:

habe ich das Plugin cordova-custom-config, die der Haken unter einpackt und Mittel plattformspezifische benutzerdefinierte Konfigurationsblöcke (wie diese Orientierungseinstellungen) können in config.xml definiert werden. Sie können also das Plug-In verwenden, statt den Haken unten manuell erstellen zu müssen.


Dies wurde in der Cordova 5.0.0 CLI eingeführt - see here.

In der Zwischenzeit habe ich einen After_prepare-Hook als Workaround verwendet. Legen Sie einfach die folgende in <your_project>/hooks/after_prepare/some_file.js und die Ausrichtungseinstellungen entsprechend ändern:

#!/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; 
} 

Hinweis: Sie werden die plist und xml2js Knotenmodule installieren müssen, wenn Sie sie nicht bereits haben.

+0

Diese Lösung funktioniert perfekt Dave angeben. Zuerst habe ich plist und xml2js ohne Sudo installiert und hatte Probleme. Sobald ich beide deinstalliert und mit Sudo neu installiert habe, funktionierte alles perfekt.Danke noch einmal. – sdesapio

3

Wenn Sie möchten, können Sie programmgesteuert auf der JS-Seite zu ihm.

für iOS kann Orientierung programmatisch durch die Definition eines Javascript-Rückruf auf Fenster

/** 
// @param {Number} degree - UIInterfaceOrientationPortrait: 0, 
// UIInterfaceOrientationLandscapeRight: 90, 
// UIInterfaceOrientationLandscapeLeft: -90,  
// UIInterfaceOrientationPortraitUpsideDown: 180 
* @returns {Boolean} Indicating if rotation should be allowed. 
*/ 
function shouldRotateToOrientation(degrees) { 
    return true; 
} 

Set erlaubt Orientierungen in Ihrer config.xml Datei

<platform name="ios"> 
    <preference name="Orientation" value="all" /> 
</platform> 

und fügen Sie den shouldRotateToOrientation(degrees)

gesteuert werden
onDeviceReady: function() { 
    app.receivedEvent('deviceready'); 
    window.shouldRotateToOrientation = function(degrees) { 
     //if device an iPad ? 
     if (navigator.userAgent.match(/iPad/i)) { 
      return true; 
     } 
     //else if device an iPhone ? 
     else if (navigator.userAgent.match(/iPhone/i)) { 
      if (degrees == 0) { //orientation is portrait 
       return true; 
      } 
      return false; //refuse all other orientations for iPhone 
     } 
     return true; 
    }; 
} 
+0

Und wo werfen Sie diesen Code? Nur in der index.html Datei der AngularJS App? –

+1

Ich habe meine Antwort bearbeitet, es könnte Ihnen helfen – Niko

+0

Vielen Dank für die Nachverfolgung. Ich hatte eine Menge Zeit damit. Ich habe die Version von Cordovas iOS-Plugin in meiner App aktualisiert und die Orientierungsdrehung unterbrochen - zumindest bis jetzt. –

0

Dieses Problem behoben und Sie können jetzt Ausrichtung als 'alle' in config.xml

<platform name="ios"> 
     <preference name="Orientation" value="all" /> 
</platform> 

Docs

+0

Der Bug Das Überschreiben der Orientierungspräferenzen wurde möglicherweise behoben, aber die ursprüngliche Frage "Ich muss verschiedene Orientierungseinstellungen für iPad und iPhone einstellen können" und AFAIK ist immer noch nicht möglich, indem Einstellungen in der Datei config.xml – DaveAlden

+0

verwendet werden Sie haben Recht - OP möchte verschiedene Spezifikationen für Gerätetypen. Ich kam hier an, weil es mich zu einem Porträt zwang. Schätze, ich war aufgeregt, dass dies behoben wurde. –

+0

Trotzdem, gut zu wissen, dass der Bug behoben wurde - danke für das Update :-) – DaveAlden