Por que o aplicativo iOS empacotado PhoneGap (nuvem) sempre mostra a imagem da tela inicial padrão no iOS?
-
21-12-2019 - |
Pergunta
Eu criei um aplicativo multiplataforma (para ser empacotado para iOS, Android e Windows Phone) em Sencha Touch 2.3.1-gpl e empacotou-o para iOS via phonegap.com (nuvem Phonegap).O aplicativo e o ícone do aplicativo funcionam bem em todos os dispositivos iOS, mas quando o aplicativo é iniciado, este Phonegap padrão tela de abertura é mostrado:
Não consigo encontrar nenhuma opção na IU do Phonegap (nuvem) para selecionar uma tela inicial para meu aplicativo:
Agora minhas perguntas são:
Onde ou como posso definir uma tela inicial personalizada para meu aplicativo?
A tela inicial deve ser especificada no código do aplicativo Sencha Touch? OU Ele precisa ser adicionado em algum lugar na IU do Phonegap (nuvem)?
Aqui está meu código Sencha Touch app.js em Não especifiquei nenhum ícone ou tela inicial porque, de acordo com meu entendimento, ícones e telas iniciais devem ser adicionados no Phonegap (nuvem):
Ext.Loader.setConfig({disableCaching: false});
Ext.application({
name: 'RedmineApp',
views: ['Issue', 'ProjectIssues', 'RedmineIssuesNavigator', 'RedmineTabPanel', 'RedmineChart', 'RedmineChartsNavigator', 'UserInputView', 'RedmineIDChart', 'RedminePriorityChart', 'RedmineTrackerChart', 'RedmineStatusChart', 'IssueHistory'],
models: ['RedmineConfig', 'Issue', 'IssueCategory', 'IssuePriority', 'Project', 'ProjectMembership', 'Tracker', 'User', 'IssueStatus'],
stores: ['RedmineConfigs', 'Projects', 'IssuePriorities', 'IssueStatuses'],
controllers: ['Projects', 'Issues', 'ChartsMenu', 'UserInputFields'],
launch: function() {
// Destroy the #appLoadingIndicator element
Ext.fly('appLoadingIndicator').destroy();
// Initialize the main view
Ext.Viewport.add(Ext.create('RedmineApp.view.RedmineTabPanel'));
},
projectIdentifier: null,
redmine_url: '',
redmine_access_key: '',
loadRedmineConfig: function() {
var configStore = Ext.getStore('RedmineConfigs');
configStore.load();
var redmine_config = configStore.getAt(0);
if (redmine_config !== undefined) {
this.redmine_url = redmine_config.get('redmine_url');
this.redmine_access_key = redmine_config.get('redmine_access_key');
} else {
this.redmine_url = 'http://redmine.arkhitech.com';
}
},
saveRedmineConfig: function() {
var newRecord = new RedmineApp.model.RedmineConfig({
redmine_url: this.redmine_url,
redmine_access_key: this.redmine_access_key
});
var configStore = Ext.getStore('RedmineConfigs');
configStore.load();
configStore.removeAll();
configStore.add(newRecord);
configStore.sync();
},
setRedmineUrl: function(redmine_url) {
this.redmine_url = redmine_url.replace(/\/$/, '');
this.saveRedmineConfig();
},
getRedmineUrl: function() {
if (this.redmine_url === '') {
this.loadRedmineConfig();
}
return this.redmine_url;
},
redmine_base_path: '',
setRedmineBasePath: function(redmine_base_path) {
this.redmine_base_path = redmine_base_path;
},
getRedmineBasePath: function() {
return this.redmine_base_path;
},
setRedmineAccessKey: function(redmine_access_key) {
this.redmine_access_key = redmine_access_key;
this.saveRedmineConfig();
},
getRedmineAccessKey: function() {
if (this.redmine_access_key === '') {
this.loadRedmineConfig();
}
return this.redmine_access_key;
},
setCurrentProjectIdentifier: function(projectIdentifier) {
this.projectIdentifier = projectIdentifier;
},
getCurrentProjectIdentifier: function() {
return this.projectIdentifier;
},
getCurrentProjectTrackers: function() {
return this.projectTrackersStore;
},
setCurrentProjectTrackers: function(projectTrackersStore) {
this.projectTrackersStore = projectTrackersStore;
},
getCurrentIssuesStore: function() {
return this.createIssuesStore(this.getCurrentProjectIdentifier());
},
getCurrentProjectIssueCategories: function() {
return this.issueCategoriesStore;
},
setCurrentProjectIssueCategories: function(issueCategoriesStore) {
this.issueCategoriesStore = issueCategoriesStore;
},
loadProjectSettings: function(project_id) {
var Project = Ext.ModelManager.getModel('RedmineApp.model.Project');
Project.load(project_id, {
success: function(project) {
RedmineApp.app.setCurrentProjectTrackers(project.trackersStore);
RedmineApp.app.setCurrentProjectIssueCategories(project.issueCategoriesStore);
}
});
},
createIssuesStore: function(projectIdentifier) {
var newStore = Ext.create('Ext.data.Store', {
model: 'RedmineApp.model.Issue',
autoLoad: true,
proxy: {
type: 'dynamicrest',
resourcePath: '/projects/' + projectIdentifier + '/issues',
format: 'json',
reader: {
rootProperty: 'issues',
type: 'json'
}
},
grouper: {
groupFn: function(record) {
return record.get('updated_on');
},
sortProperty: 'updated_on',
direction: 'DESC'
}
});
return newStore;
}
});
Solução
Resolvi adicionando isso config.xml arquivo na raiz do código do aplicativo Sencha Touch:
<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns = "http://www.w3.org/ns/widgets"
xmlns:gap = "http://phonegap.com/ns/1.0"
id = "com.phonegap.example"
versionCode = "10"
version = "1.0.0" >
<!-- versionCode is optional and Android only -->
<name>Your app name</name>
<description>
Your app description
</description>
<author href="http://www.author.com" email="info@email.com">
Author Name
</author>
<!-- iPhone and iPod touch -->
<gap:splash src="splash/ios/Default.png" gap:platform="ios" width="320" height="480" />
<gap:splash src="splash/ios/Default@2x.png" gap:platform="ios" width="640" height="960" />
<!-- iPhone 5 / iPod Touch (5th Generation) -->
<gap:splash src="splash/ios/Default-568h@2x.png" gap:platform="ios" width="640" height="1136" />
<!-- iPad -->
<gap:splash src="splash/ios/Default-Portrait.png" gap:platform="ios" width="768" height="1024" />
<gap:splash src="splash/ios/Default-Landscape.png" gap:platform="ios" width="1024" height="768" />
<!-- Retina iPad -->
<gap:splash src="splash/ios/Default-Portrait@2x.png" gap:platform="ios" width="1536" height="2048" />
<gap:splash src="splash/ios/Default-Landscape@2x.png" gap:platform="ios" width="2048" height="1536" />
</widget>
Depois de adicionar este arquivo, o Phonegap (Cloud) começa a pegar o nome, a descrição e a tela inicial deste arquivo config.xml em vez de usar seus próprios padrões.