Visualizzazione post con etichetta Xcode. Mostra tutti i post
Visualizzazione post con etichetta Xcode. Mostra tutti i post

martedì 21 agosto 2018

Could not find Developer Disk Image

Ecco un buon motivo per non usare Mac.
Sto usando un vecchio portatile MacBook Pro con installato El Capitan 10.11.6 (piu' recente sistema installabile). Per adesso lo ho usato quasi solo  come macchina da scrivere ma adesso volevo provare ad usare Cordova ed avevo la necessita' di installare XCode
Primo problema: XCode per le versioni "vecchie" non si installa da Apple Store. Si deve scaricare il pacchetto a parte (e bisogna sapere quale e' il pacchetto giusto...nel mio caso XCode 7.3.1) ma per fare cio' bisogna anche essere sviluppatori registrati e quindi aver pagato l'abbonamento

Fatto cio' ho provato a compilare un semplice codice e ad installarlo sul telefono (un iPhone SE con iOS 11.4.1) ed e' saltato fuori l'errore Could not find Developer Disk Image...e quindi ??? . Tutto cio' nonostante avessi esplicitamente messo come target IOs 9.3 ovvero il massimo per XCode 7




Dopo un bel po' di giri su Internet ho scoperto che si possono scaricare le Developer Disk Image in modo non ufficiale (ma firmate) da questo sito

https://github.com/xushuduo/Xcode-iOS-Developer-Disk-Image

e poi devono essere copiate nella cartella

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

ed alla fine funziona

martedì 7 febbraio 2017

Integrazione GitHub e XCode

L'integrazione tra GitHub e XCode e' piuttosto semplice.
Per prima cosa dall'interfaccia Web si crea un nuovo progetto e nella root del progetto si digitano i seguenti comandi (come da istruzioni a video)

-----
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/[nome_utente]/[nome_progetto].git
git push -u origin master
-----

fatto cio' aprendo il menu Source Control di XCode si trova gia' il tutto configurato. Da qui in poi si puo' gestire tutto da XCode





giovedì 7 gennaio 2016

Scrivere file con Cordova su Android Studio/XCode

Con Apache Cordova e' possibile scrivere dati sulla memoria del dispositivo mobile ma, a causa delle enormi differenze della gestione dello storage nei vari sistemi operativi, non e' possibile avere una soluzione unica ma si devono effettuare adattamenti ad hoc

Per prima cosa si deve aggiungere il plugin File con il comando

cordova plugin add org.apache.cordova.file
IOS
Il filesystem in IOS ovviamente non viene esposto e lo scambio dati avviene solo tramite ITunes



Il progetto Xcode di Cordova deve essere modificato come segue

1) deve essere aggiunto una chiave file info.plist
Application supports Itunes file sharing = YES
(UIFileSharingEnabled = YES)


2) deve essere aggiunto al file config.xml (dopo gli allow) il seguente codice
-------------
    <feature name="File">
        <param name="ios-package" value="CDVFile" />
    </feature>
    <feature name="FileTransfer">
        <param name="ios-package" value="CDVFileTransfer" />
    </feature>
    <preference name="iosPersistentFileLocation" value="Library" />
    <preference name="BackupWebStorage" value="local" />
-------------

3) il codice HTML5 deve essere leggermente modificato rispetto agli esempi di Cordova (in particolare si deve puntare sulla directory Documents che su IOS e' persistente ed in lettura/scrittura. Per un esempio si puo' leggere anche questo post
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
    console.log("FileSystem Error");
    console.dir(e);
}

function onDeviceReady() {
    
    window.resolveLocalFileSystemURL(cordova.file.documentsDirectory, function(dir) {
                                     console.log("got main dir",dir);
                                     dir.getFile("log.txt", {create:true}, function(file) {
                                                 console.log("got the file", file);
                                                 logOb = file;
                                                 writeLog("App started");
                                                 });
                                     });
    
    document.querySelector("#actionOne").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionOne here
                                                          //
                                                          //Now log it
                                                          alert("tasto 1");
                                                          writeLog("actionOne fired");
                                                          }, false);
    
    document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionTwo here
                                                          //
                                                          //Now log it
                                                          alert("tasto 2");

                                                          writeLog("actionTwo fired");
                                                          }, false);
    
}

function writeLog(str) {
    if(!logOb) {
        alert("errore write log");
            return;
            }
    var log = str + " [" + (new Date()) + "]\n";
    console.log("going to log "+log);
    alert("Luca");
    logOb.createWriter(function(fileWriter) {
                       
                       fileWriter.seek(fileWriter.length);
                       alert("Luca");
                       
                       var blob = new Blob([log], {type:'text/plain'});
                       fileWriter.write(blob);
                       console.log("ok, in theory i worked");
                       }, fail);
}

function justForTesting() {
    logOb.file(function(file) {
               var reader = new FileReader();
               
               reader.onloadend = function(e) {
               console.log(this.result);
               };
               
               reader.readAsText(file);
               }, fail);
    

}
-------------


Android

Su Android le cose sono decisamente piu' semplici

si dichiara in config.xml che si vuole usare il plugin
-------------
<feature name="File">
<param name="android-package" value="org.apache.cordova.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.FileTransfer" />
</feature>
-------------

Si settano in permessi di scrittura in AndroidManifest.xml
-------------
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-------------

Di nuovo il codice HTML5 dell'esempio di Cordova in cui e' evidenziata in giallo la modifica per Android
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
console.log("FileSystem Error");
console.dir(e);
}

function onDeviceReady() {

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function(dir) {
console.log("got main dir",dir);
dir.getFile("log.txt", {create:true}, function(file) {
console.log("got the file", file);
logOb = file;
writeLog("App started");
});
});

document.querySelector("#actionOne").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionOne here
//
//Now log it
writeLog("actionOne fired");
}, false);

document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionTwo here
//
//Now log it
writeLog("actionTwo fired");
}, false);

}

function writeLog(str) {
if(!logOb) return;
var log = str + " [" + (new Date()) + "]\n";
console.log("going to log "+log);
logOb.createWriter(function(fileWriter) {

fileWriter.seek(fileWriter.length);

var blob = new Blob([log], {type:'text/plain'});
fileWriter.write(blob);
console.log("ok, in theory i worked");
}, fail);
}

function justForTesting() {
logOb.file(function(file) {
var reader = new FileReader();

reader.onloadend = function(e) {
console.log(this.result);
};

reader.readAsText(file);
}, fail);

}
-------------

venerdì 19 giugno 2015

Crash su sottomissione ad Apple Store


Oggi una sorpresa. Mandando in verifica una app su Apple Store con la stessa procedura che ho fatto solo un paio di giorni fa XCode ha crashato in modo non recuperabile


Chiudere ed aprire Xcode non serve a niente e nemmeno reinstallarlo

La soluzione arriva da questo link: si deve archiviare l'applicazione, lanciare Organizer, chiudere il progetto nella finestraa principale di XCode lasciando aperto Organizer e solo a questo punto si effettua l'upload su Apple Store

Ancora devo capire perche' continuo a pagare soldi per questo tipo di servizio....

mercoledì 9 luglio 2014

Associare IPhone ad XCode

Per poter provare le applicazione IOS direttamente dentro ad un telefono reale (e non il simulatore) oltre a pagare Apple per registrarsi come developer si deve anche registrare il dispositivo all'interno del proprio profilo (c'e' un limite di 100 dispositivi per sviluppatore)

Per prima cosa si deve aprire XCode (con l'IPhone collegato ed aprire Window/Devices)
L'identificativo del dispositivo e' una stringa di 40 caratteri


a questo punto si va sul proprio profilo sviluppatore sul sito Apple e si inserisce il codice copiato in precedenza


Fatto cio' e' possibile testare le applicazioni sul proprio IPhone






Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...