Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cordova Phonegap IOS App Settings.Bundle Possible?

So I'm new to mobile development but I'm close to finishing up my first IOS application using HTML/CSS/JS and Cordova PhoneGap 3. I am trying to allow the user to provide text input through the iPhone's native "Settings" app (gray gear icon). My app will have have its own settings section within the "Settings" app where the user can input a specific IP address, that my app will then use.

What I've found out so far is that I may need to install a PhoneGap plugin and need to add a settings.bundle root.plist file:

https://github.com/phonegap/phonegap-plugins/tree/DEPRECATED/iOS/ApplicationPreferences

Phonegap 3.0 iOS7 ApplicationPreferences Plugin

https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html

Unfortunately i'm not experienced enough to make due with just this :/ I was hoping a helpful vet with more experience can spell it out a little clearer and point me in the right direction:

  • Do I just take the .h, .m, and .js files and put them in the 'plugins' and 'www' directories respectfully, or do I have to use the commandline 'phonegap local plugin add htttps//github...' command?
    • the commandline option did not work. Is this because the github code is deprecated?
  • How do I "reference the plugin in my app"? is it just adding this extra line to my index.html page's body or is there more to it?: <script type="text/javascript" src="applicationPreferences.js"></script>

Sorry for all the longwinded rookie confusion.. I just for the life of me could not find a easy-to-understand guide on how to do this anywhere online. I'm sure there will be plenty after me that have these same questions so I really appreciate the help. Thanks much.

like image 206
profoundWanderer Avatar asked Mar 19 '14 16:03

profoundWanderer


1 Answers

To create a Settings bundle that will work without having to muck in platforms/ios/, create a local plugin in your project.

./src/ios/plugin.xml

<?xml version="1.0" encoding="UTF-8"?>

<plugin xmlns="http://cordova.apache.org/ns/plugins/1.0"
    id="com.example.application.settings"
    version="0.4.2">

    <name>Application Settings</name>
    <description>My Application's Default Settings</description>
    <license>Proprietary</license>
    <keywords>preferences, settings, default</keywords>
    <repo>https://github.com/</repo>

    <platform name="ios">    
        <resource-file src="Settings.bundle" />
    </platform>
</plugin>

In Xcode, open ./src/ios, and create a new Settings.bundle

./src/ios/Settings.bundle/Root.plist

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string>API Server</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>DefaultValue</key>
            <string>https://api.example.com</string>
            <key>IsSecure</key>
            <false/>
            <key>Key</key>
            <string>name_preference</string>
            <key>KeyboardType</key>
            <string>Alphabet</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

At the root of your project, run cordova plugin add ./src/ios. It will say Installing "com.dataonline.dolores.settings" for ios.

Use me.apla.cordova.app-preferences to load those settings from Javascript.

./src/client/preferences.js

function ApplicationPreferences(){
    var _this = this;
    this.server = window.location.origin;
    document.addEventListener('deviceready', function(){
        function loaded(server){_this.server = server;}
        plugins.appPreferences.fetch(loaded, function(){}, 'api_server');
    });
};

applicationPreferences = new ApplicationPreferences();
// Later..
$.get(applicationPreferences.server + "/api/data");

Edit Switched from two <source-file>s to one <resource-file>

like image 83
David Souther Avatar answered Oct 18 '22 23:10

David Souther