Kategorien
JavaScript React Native

React Native für hybride native Apps

Ein sehr interssante Möglichkeit um native Apps für Android und iOS zu schreiben bietet React Native von Facebook, damit wird zwar in Javascript und react.js gecodet, aber es werden damit native Funktionen benutzt wie bei Titanium und im Gegensatz zu Phonegap.

Sicherlich eine höchst interessante Alternative zu Titanium und Phonegap.

Kategorien
Phonegap/Cordova

Phonegap bessere native Performance mit Steroids

Phonegap hat die große Schwachstelle, dass die Peerformance der UIs sehr langsam ist, dagegen gibt es ein Projekt namens Steroids welches es ermöglicht z.B. native Listviews zu benutzen und so die Performance merklich zu steigern, absolut empfehlenswert.

Meiner Meinung nach sollte Phonegap nicht ohne Steorids verwendet werden!

Kategorien
Mobil

SMS unter der Lupe, ihre Funktion heutzutage

Angesichts der zunehmen stärker werdenden Konkurrenz durch Messaging-Dienste wie Whats App, Skype oder Viber für Smartphones wirkt es verwunderlich, dass der Versand von SMS-Nachrichten nach wie vor boomt. Laut aktueller Hochrechnungen der  Bundesnetzagentur werden im Jahr 2011 rund 55 Milliarden Kurznachrichten via SMS ihre Empfänger erreichen. Der Grund dafür liegt nach Meinung der Experten in der Vertragsgestaltung des jeweiligen Anbieters.

Kategorien
JavaScript jQuery jQuery Mobile Phonegap/Cordova

Javascript ersetzen aller css background-images durch Retina-Bilder

Wenn man vor dem Problem steht, dass dynamisch generierte CSS background-images verwendet werden, um Bilder auf einer Webseite darzustellen und diese dann auch für Retina Displays gut aussehen sollen, kann man folgendes Skript verwenden. Es überprüft zusätzlich mittels eines Ajax Requests, ob die Bilder vorhanden sind/existieren.

Voraussetzung ist, dass eine Namenskonvention für nicht-Retina Bilder und Retina verwendet wird wie z.B.:

bild1@1x.jpg für nicht-Retina Bilder

und

bild1@2x.jpg für Retina Bilder

<!--Retina Fix for dynamic background images-->
        <script type="text/javascript">
            function isRetinaDisplay()
            {
                var dpr = 1;
                if(window.devicePixelRatio !== undefined) dpr = window.devicePixelRatio;
                return dpr >= 2;
            }

            var notRetinaString = "@1x";
            var retinaString = "@2x";

            $(document).ready(function() {
                //if we have a retina display
                if(isRetinaDisplay())
                {
                    //select all elements having background images
                    var $elementsWithBackground = $('*').filter(function() {
                        if (this.currentStyle)
                            return this.currentStyle['backgroundImage'] !== 'none';
                        else if (window.getComputedStyle)
                            return document.defaultView.getComputedStyle(this,null)
                                .getPropertyValue('background-image') !== 'none';
                    });
                    //replace their background-image with retina images
                    $elementsWithBackground.each(function( index ) {
                        $backGroundImage = $(this).css('backgroundImage');
                        /*console.log($backGroundImage);*/
                        //when it is no retina image
                        if($backGroundImage.indexOf(notRetinaString) !== -1)
                        {
                            //replace with retina image
                            $newBackgroundRetinaImage = $backGroundImage.replace(notRetinaString,retinaString);
                            $newBackgroundRetinaImageUrl = $newBackgroundRetinaImage.replace('url("','').replace('")','');
                            //check if retina file exists
                            var $myThis = this;
                            $.ajax({
                                url:$newBackgroundRetinaImageUrl,
                                type:'HEAD',
                                cache: true,
                                success:function() {
                                    console.log($newBackgroundRetinaImage);
                                    $($myThis).css('backgroundImage', $newBackgroundRetinaImage);
                                },
                                error:function() {
                                    console.log("no retina image found for: " + $backGroundImage);
                                }
                            });

                        }
                    });
                }
            });
        </script>
Kategorien
JavaScript jQuery Mobile Mobil

Javascript überprüfen auf Retina-Display Funktion

Um zu überprüfen, ob ein Gerät mit Retina-Display (neues iPhone oder Mac Book) gerade auf der Seite surft, kann man die handliche Funktion verwenden:

            function isRetinaDisplay()
            {
                var dpr = 1;
                if(window.devicePixelRatio !== undefined) dpr = window.devicePixelRatio;
                return dpr >= 2;
            }
Kategorien
Android

ActionBarSherlock eigenes Design

ActionBarSherlock ist ein Framework für Android um eine ActionBar implementieren zu können vor der Android Version 3.0, bei der es eine native ActionBar gibt.

Beispiel für Actionbar mit eigenem Design unter Android 2.3.3

Außerdem kann man sehr viele Funktionen nutzen,die selbst die native ActionBar nicht möglich macht, eine Übersicht kann man sich am besten verschaffen durch die Installation der Sample App auf einem Android Device.

Eine Schwierigkeit des Frameworks besteht in der Individualisierung des Designs, dies ist sehr schwer möglich ohne den Online Style Generator für ActionBarSherlock. Mit diesem lässt sich viel Zeit sparen, absolut zu empfehlen!

Aktiviertes Suchfeld in Actionbar

 

Kategorien
Phonegap/Cordova

Phonegap Präsentation

Eine Präsentation zu Phonegap mit Schwerpunkt auf die Programmierung unter Android.

Download: Phonegap Präsentation

Kategorien
jQuery Mobile Phonegap/Cordova

Mobile Multi Share Implementation mit jQuery Mobile

Mit dem passendem HTML lässt sich so sehr komfortabel ein Share-Alternative aufbauen für mobile Anwendungen um Platz zu sparen (mit jQuery Mobile).

Dabei werden die Share Dienste in ein <select> Tag eigetragen und per Javascript einzeln gehandelt. Das Ergebnis sieht auf Android-Phones so aus:

Kategorien
iPhone/iOS Mobil

günstigste Hardware für iOS Entwicklung: Mac Mini Tuning

Wenn man man vorhat in die iOS Entwicklung einzusteigen und seine eigene App programmieren will, benötigt man zwingend einen Mac, der nicht gerade billig ist. Im folgenden Artikel beschreibe ich, wie ich mir für 350€ (November 2012) einen Mac für die Entwicklung meiner iPhone Apps gekauft und diesen für Xcode aufgerüstet habe.

Für die iOS Entwicklung für iPhone und iPad benötigt man zwingende einen Mac mit Intel Prozessor. Leider sind diese nicht besonders günstig zu haben 🙁

Außerdem braucht man für die Programmierung zwingend Xcode als IDE, um auf iPhone und iPad zu testen und die App in den Store zu bringen.

Die neuste Version Xcode (4.5 aktuell) wiederum benötigt zwingend Mac OS X 10.7, was als Mindestanforderungen 2GB RAM und mindestens eine Intel Core 2 Duo benötigt (Achtungen, einen Intel Core Duo reicht nicht aus!).

Als günstigste Alternative habe ich mir deshalb einen gebrauchten Mac Mini gekauft mit

Kategorien
Android Phonegap/Cordova

Vergleich von Augmented Reality Frameworks für Android

[table id=1 /]

Fazit:

Ich habe mich für Mixare entschieden, welches  sehr gut gecodet, aber weniger gut dokumentiert ist. Ist ist sehr einfach möglich seine eigenen Daten oder Wikipedia Daten über die Kamera zu legen und gleichzeitig dieselben Daten auf Google Maps als Marker anzuzeigen.

Vuforia erscheint für die Entwicklung von Android/iPhone Lösungen der geeignete Kanditat zu sein, jedoch wird in der Lizenz verlangt, dass Benutzerdaten an den Qualcomm Server gesendet werden und der User darüber informiert werden muss:

Auszug aus der Lizenz von Vuforia

„You must inform end-users of your application that certain types of anonymous usage data is collected by the Vuforia SDK and sent back to Qualcomm servers.“

„(i) the collection by QUALCOMM and/or its affiliates of Statistics from the Software (including but not limited to: (a) information about the end users‘ devices such as device unique identifier, make, model, operating system name and version and kernel version, (b) information about our Software used to create your software or augmented reality end user application such as the SDK version and device profile, and (c) information about your software or augmented reality application and its use such as settings (e.g., camera resolution settings, configuration settings), start and stop dates and times, camera on/off events, target image obtained/lost events, and other general usage information (collectively „Statistics“)).“