Schaffung der Gemeinschaft für britische kleine Unternehmen zu verbinden und zu wachsen UK Business Forums bietet für Website-Community Diskussion und Vernetzung von Hunderttausenden von kleinen Unternehmen und Unternehmer. Durch die Kombination der britischen aktivsten Community von kleinbürgerlichen Entscheidungsträgern, in denen monatlich mehr als 25.000 Beiträge geleistet werden, ermöglichen die britischen Business-Foren mit strukturierten, relevanten und überzeugenden redaktionell gehärteten Inhalten die Möglichkeit, kleine Unternehmen sinnvoll und effektiv einzubinden. Vital Stats 430.220 Unique Besucher pro Monat 266.000 Profiled Mitglieder 880.890 Unique Seitenaufrufe pro Monat 35 Monatliche Besuche von mobilen Geräten Media Pack Füllen Sie das untenstehende Formular aus, um die UKBusinessForums. co. uk Media-Paket herunterladen Xcode 6, hat Apple beschlossen, unser Leben einmal schwer zu machen (Ich sollte dies inzwischen verwendet werden), indem sie, dass Entwickler technische Team-Mitglieder oder haben direkten Zugriff auf die Entwickler-Konto Anmeldeinformationen, um Ad Hoc oder Enterprise-Builds zu verteilen. Um fair zu sein, ist das Team Mitglied System weit überlegen, die ursprüngliche Einrichtung, wo ich musste alle Entwickler-Logins für alle meine Kunden erinnern, so ist dies die Richtung der Güte. Das Problem tritt auf, wenn ein bestimmter Client dem Entwickler nicht als Teammitglied oder mit den Anmeldeinformationen vertraut und es vorzieht, Ihnen das Verteilungszertifikat, den privaten Schlüssel und die mobile Bereitstellungsdatei direkt zu geben. Zum Glück habe ich weniger als 5 Kunden mit dieser Präferenz und sie sind alle enormen Unternehmen, die einige legitime administrative Kopfschmerzen Umgang mit vielen verschiedenen Entwicklungsunternehmen haben. Für alle anderen Entwickler, die im selben Boot wie ich sind, ist hier ein detaillierter Workaround für das neue Xcode Distribution System. Ich bin erweitern und Hinzufügen mehr Details auf die Antwort, die ich ursprünglich auf stackoverflow gefunden. Ich kam nicht mit der ursprünglichen Lösung. Ich versuche, es klarer für andere whove nie zu tun, Befehlszeilen-Builds in iOS. Laden Sie die Befehlszeilenprogramme für Xcode aus dem Menüpunkt Weitere Entwicklerwerkzeuge herunter, und installieren Sie sie. Im Terminal ändern Sie das Verzeichnis auf Ihren Projektpfad, um Ihr Leben leichter zu machen mit cd SomeFolder / MyProject Typ xcodebuild archive - project MyProjectName. xcodeproj - scheme MySchemeName - archivePath MyProject. xcarchive MyProjectName ist buchstäblich der Name Ihres Projekts. Es sollte das gleiche sein für die. xcodeproj und. xcarchive MySchemeName ist der Name des Schemas, das Sie erstellen, also wenn Sie mehrere Ziele haben, ist es das, was Sie das Schema benannt, wenn Sie es erstellt haben. Es ist wahrscheinlich das gleiche wie Ihr Zielname, aber hängt davon ab, wie Sie Ihr Projekt einrichten. Finden Sie es im Menü "Manage Schemes". Sobald dies gelingt, müssen wir das Archiv, das wir erstellt haben, zu exportieren. Typ xcodebuild - exportArchive - archivePath MyTargetName - exportFormat ipa - exportProvisioningProfile Tatsächlicher Name des Profils MyProject ist derselbe wie Ihr Projektname und identisch mit dem Archivnamen aus dem letzten Schritt MyTargetName ist der Name, der für die Datei gewünscht wird. Ich benutze den Zielnamen, aber es könnte alles sein. Das Resultat ist NameIChose. ipa Tatsächlicher Name des Profils ist das nur etwas tricky. Es muss genau mit dem Namen des Profils übereinstimmen, wenn es erstellt wurde. Seine leicht zu finden, aber auf der Registerkarte Build-Einstellungen unter dem Code Signing Abschnitt. Und jetzt sind Sie fertig, können Sie die. ipa hochladen, was System Sie verwenden, um Ihre Distributionen Host. Um diese Lösung vollständig zu optimieren, sollten Sie ein Skript erstellen, das alle diese Schritte für Sie mit wenigen Eingaben ausführt. Aber das ist eine Übung für einen zukünftigen Artikel. Politische Kampagnen waren nie schüchtern über die Annahme neuer Technologien und Strategien. Wenn wir an ein modernes Wahlkampf-Hauptquartier denken, denken wir über Freiwillige, die an Telefonbanken oder Füllungumschlägen aufgereiht sind. Menschen zu beteiligen und aufgeregt über Kampagnen bedeutet, sich an diejenigen, die in kommen und wollen einige Arbeit. Aber wenn Kampagnen senden ihre Nachrichten, sie oft nur auf Einweg-Medien verlassen. Ein Fernsehwerbung ist eine große Weise, eine Mitteilung herüber zu erhalten. Gleiches mit einem Kampagnenmailer, der zu Tausenden von Leuten ausgeht. Und schließlich ist eine Web-Seite jetzt als ein wichtiges Repository für Kampagne Informationen und Veranstaltungen gedacht. Bei der Massenkommunikation fehlen jedoch Kampagnen die Echtzeit-Rückmeldung dieser Meldungen. Sie können nur Track auf Fokusgruppen und Polling zu verfolgen. Social Media hat mitgekommen und half, diese Lücke zu schließen. In Echtzeit können Kampagnen jetzt Nachrichten teilen und Unterstützer aktualisieren. Sie erhalten auch den Nutzen der sofortigen Feedback von den Unterstützern, die mit Social Media. Es ist immer noch der Anhänger, der Kampagne tatsächlich folgen, aber es ist ein näherer Schritt. Wähler wollen auch ihre Stimmen gehört. Sie wollen Nachrichten an die Kampagnen senden, die sie für wichtig halten. Letztlich haben Sie einen Kandidaten und ein Volk, die gehört und verbunden werden wollen. Eine App für Smartphones und Tablets ist der nächste Schritt für Kampagnen, um mit ihren Unterstützern in Verbindung zu treten. Es geht über nur eine ausgefallene Web-Seite kann es ein Werkzeug, um Aktion von Anhängern der App zu fördern, sondern lässt sie auch ein Teil der Kampagne fühlen, wie sie Ideen beitragen und teilen Nachrichten mit ihren Kollegen. In der vorherigen US-Präsidentschaftskampagne sahen die beiden konkurrierenden Kampagnen das Potenzial von Apps. Die Obama-Kampagne verwendet seine sehr beliebte App, um Nachrichten zu teilen und auch sehr gezielte marschierende Befehle zu den Unterstützern zur Verfügung zu stellen. Die Romney App fiel technologisch während der letzten Wahl-Laufwerk, aber das Ziel der Motivation von Aktionen durch eine App war die gleiche. Beide Apps waren sehr kompliziert, teure benutzerdefinierte Software, die außerhalb der Reichweite von fast jeder Kampagne wäre. Tiny Candidate wurde geschaffen, um die Zeit und Kosten Lücke Brücke, um alle Kampagnen zu mobilen Anwendungen nutzen zu überbrücken. So stellen Sie eine Anwendung bereit, die eine Nachricht teilt und eine Aktion erstellt. Auf einer gemeinsamen Plattform mit modernen und sicheren Tools gebaut, kann jede Größe Kampagne jetzt erstellen und pflegen eine App für einen Bruchteil der Kosten für ein benutzerdefiniertes Produkt. Kampagnen können die Ressourcen, die sie bereits installiert haben, für die Aktualisierung von Social Media-Streams verwenden, um die App automatisch zu aktualisieren. Die Tiny Candidate Apps sind auch flexibel, dass die Updates über alle Benutzer in der Nähe von Echtzeit verteilt sind. Aber ich habe eine mobile Website Mobile Apps bieten eine leistungsstarke native Erfahrung, aber es gibt Vorteile für eine mobile App weit darüber hinaus. Eine mobile Website ist passiv, Ihre Kampagne wartet auf die Unterstützer zu besuchen. Eine App ermöglicht es der Kampagne, gezielte Nachrichten an Benutzer zu jeder Zeit zu schieben. Stellen Sie sich vor, eine Antwort auf ein dringendes Thema zu senden, sobald Ihr Gegner seine Pressekonferenz abgeschlossen hat. Genau wie Benachrichtigungen uns sagen, Verkehrsbedingungen und warnen uns vor Sicherheitsbedenken, können Kampagnen mit den gleichen Tools, um ihre Anhänger zu warnen. Ihre Unterstützer hören einen Ton und werden zu Ihrer Mitteilung wie eine Textnachricht alarmiert. Die Macht der Benachrichtigungen stoppt nicht nur das Teilen einer Nachricht. Die wahre Macht kommt, wenn diese Botschaften zu begeistern Aktion. Tiny Candidate verfügt über Tools, die sofortige Benachrichtigungen mit einer Funktion, die Ihre Unterstützer teilen können diese Nachrichten mit jedem in ihrer Kontaktliste oder Social Media kombinieren können. Stellen Sie sich vor, eine kritische Antwort auf ein wichtiges Nachrichtenereignis auszusenden. Der Benutzer würde diese Benachrichtigung erhalten und dann in der Lage sein, die Antwort zu senden, die Ihre Kampagne an ihre Freunde und Familie erstellt hat. Die Macht ist, dass die Botschaften, die Freunde und Familie empfangen, nicht von einer Kampagnenadresse, sondern von jemandem, den sie kennen und vertrauen. Wer eine Botschaft von einem Freund ignorieren würde, um es anders auszudrücken - Ihre Unterstützer werden zu aktiven Partnern in Ihrer Kampagne, indem sie ihre Stimme und Glaubwürdigkeit für Ihre Kampagnen-Nachricht verleihen. Tiny Candidate bietet viele andere Tools, die für Kampagnen wichtig sind. Dazu gehören die Verwaltung von Freiwilligen und das Sammeln von Spenden. Dies sind Dinge, die Websites tun können, und jetzt sind sie in Ihrem Unterstützer Taschen. Das Planen von Ereignissen und das Teilen von Informationen ist der erste Schritt. Besuchen Sie Tiny Candidate eine kostenlose Demo zu sehen, wie eine App für Ihre Kampagne Aktion unter Ihren Unterstützern zu motivieren. Tiny Candidate hat nun Unterstützung für benutzerdefinierte Titel und Symbole auf den Navigationstasten in den Kandidaten-Apps und Websites verwendet. Dies ermöglicht es Kandidaten, das Erscheinungsbild der Hauptnavigation ohne jegliche Programmierung oder technische Unterstützung leicht zu ändern. Die obige Einstellung wird wie folgt dargestellt: Tiny Candidate basiert auf dem Prinzip, dass die Standardkonfiguration für die meisten Benutzer geeignet sein sollte, aber die Anpassungen für nicht-technische Benutzer einfach sind. Als Apple den Zugriff auf die UDID für Entwickler in Xcode 5.0 beendet hatte, versprachen sie eine Lösung, die für Ihre Unternehmenskennung eindeutig wäre und konstant sein würde, solange mindestens eine Ihrer Apps auf einem Gerät installiert war: identifierForVendor. Für den letzten Monat, Ive kämpfte mit einer meiner Unternehmen-Verteilung Anwendungen, wo Geräte-Identifikatoren haben sich häufig auf vielen meiner Geräte geändert. Es passiert, auch wenn die App nicht gelöscht wurde, aber es häufig auftritt, wenn die App-Version aktualisiert wird, oder sogar zufällig. Ich verfolge den Zugriff und Status nach Gerät, so dass eine zuverlässige Geräte-ID ist für dieses Projekt unerlässlich. Ich empfing Störungsmitteilungen, die Vorrichtungs-IDs nicht in meiner Datenbank vorhanden waren und begannen, die Situation näher zu überwachen. Ich habe jetzt mehrere Fälle einer Geräte-ID ändern während App-Nutzung aufgenommen, wo ich zwei Benachrichtigungen erhalten eine Minute oder weniger auseinander mit zwei verschiedenen Geräte-IDs. Ich kann nicht sicher sagen, ob dies ist einzigartig für Unternehmens-Distributionen, spezifische Hardware-Typen, bestimmte OS-Versionen oder etwas anderes, aber ich bin definitiv nicht vorstellen. Wenn Sie ein Entwickler sind, der eine Möglichkeit benötigt, den Zugriff auf Ihre App nach Geräten zu verfolgen, und Sie können nicht kontrollieren, welches Betriebssystem Ihre Benutzer verwenden, benötigen Sie ein besseres System. Ive gewählt, um die identifierForVendor erfassen, wenn die App zuerst installiert ist und speichern Sie sie in das Schlüsselbund. Dies hat den Vorteil, auch wenn die App gelöscht wurde, und kann auch zwischen Apps verwendet werden. Ich stieß auf eine große Keychain Wrapper namens UICKeyChainStore und legte sie an ihrem Platz. Es ist eine sehr einfache Bibliothek zu implementieren und hat gut für meine Anwendungen gearbeitet. Hinzufügen von Security. framework zu Ihrem Ziel Importieren Sie die Bibliothek mit Cocoapods oder fügen Sie einfach die beiden relevanten Dateien zu Ihrem Projekt hinzu (Optional) Fügen Sie die Schlüsselbund-Freigabeberechtigung zu Ihrem App-Ziel hinzu, wenn Sie die Möglichkeit haben, Schlüsselbunde zwischen den verschiedenen Apps zu teilen ID für das Schlüsselbund: Abrufen der Geräte-ID aus dem Schlüsselbund: Aktualisiert für iCloud von einem unserer Leser: Es besteht die Gefahr, dass mehrere Geräte-IDs gleich gesetzt werden, wenn Sie diesen Schlüsselbundeintrag in iCloud sichern. Dies kann auf zwei Arten passieren: Durch iCloud Schlüsselbund (was bedeutet, dass das Schlüsselbund zu einem anderen meiner Geräte synchronisiert werden würde, und Id erhalten die gleiche Gerätekennung gibt es auch) Durch Backups (die apps Daten, einschließlich keychain, wird auf Backups gespeichert Und kann auf ein neues Gerät wiederhergestellt werden, wodurch die Gerätekennung kopiert wird) Für das zu synchronisierende Objekt mit iCloud keychain muss ID das kSecAttrSynchronizable-Attribut explizit setzen, damit es nicht passiert. Sicherungen sind in der Tat ein mögliches Problem, aber ich habe herausgefunden, dass Sie das Attribut kSecAttrAccessibleAlwaysThisDeviceOnly hinzufügen können, um dies zu verhindern. Vielen Dank für das Feedback und zusätzliche Eingabe Tiny Mission vor kurzem ging auf eine Mission zu holen unsere neueste Plattform in den Google Büros in San Francisco. Unser Gründer Bekki Freeman und Account Director Camilo Pineda wurden von den Mitarbeitern von Google Glass begrüßt und durch die neue Technologie begleitet. Nach ein paar Wochen mit der Technologie ist es schwer, nicht darüber nachzudenken, wie es unser Leben verändern wird. Von der Erkundung der Bay Area zu dokumentieren Momente mit der Familie, es war eine nette Ergänzung zu unserer persönlichen Technologie. Als Entwickler sehen wir sicherlich das Potenzial für die Nutzung von Google Glass, aber wir sind sogar noch mehr für die kommerziellen und industriellen Anwendungen begeistert. Wir arbeiten mit mehreren Firmen, die Tabletten und Smartphones als integralen Bestandteil der Werkzeuge für ihre Außendienstmitarbeiter verwenden. Google Glass hat das Potenzial, die täglichen Aktivitäten dieser Techniker zu ändern. Es war nur ein paar Jahre, dass Techniker besuchen Kunden Hause haben sich daran gewöhnt, hinter ihrem Papier Zwischenablage. Viele haben auf unsere Software auf Tabletten umgestellt. Jetzt ist die Zukunft verlässt die Tabletten in ihrer Tasche und die Vollendung ihrer Arbeit nur die Interaktion mit dem Google Glass. Sie können den großen Kontakt mit ihren Kunden, während sie ihre Arbeit nur durch Sprechen und die Verwendung der Kamera auf dem Glas halten. Stellen Sie sich einen Techniker nur sagen, Ok Glass Send Report und ein Schnappschuss von Daten und Formulare an den Client gesendet werden. Der Klient, der seine Brille benutzt, könnte dann die Schwierigkeiten sehen, die der Techniker durch ihre eigenen Augen sieht. Sein ein sehr einzigartiges Gefühl, die Welt durch jemand elses Augen zu sehen. Wir freuen uns, dass wir uns für diese Plattform entwickeln können. Informieren Sie uns, wie wir helfen können, Ihre Google Glass Ideen zu entwickeln, oder sogar, wenn Sie eine persönliche Demo der Technologie wünschen. Folgen Sie Camilo, während er die Welt von Google Glass auf Google erforscht. Die JSON Serialisierungsmöglichkeiten des neuen. NET Web API sind ziemlich leistungsfähig. Jedoch, wenn Sie die Weise besonders anfertigen möchten, dass bestimmte Typen serialized sind, ist es nicht sehr offensichtlich, wo man anfängt. Um es komplizierter, gibt es eine Menge von Beiträgen schweben, die auf einer Vor-Release-Implementierung, die nicht mit Json basiert. NETZ. So dass sie einfach falsch. Nehmen wir an, wir wollen die System. Guid-Typen serialisieren. Standardmäßig werden Guid-Objekte mit einem Format wie xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx serialisiert, aber sagen, ich finde es angenehmer, die Form zu haben. Alles, was wir tun müssen, ist eine Umsetzung von JsonConverter zu schreiben: Dann, um Web-API zu erhalten, um unseren neuen Konverter zu benutzen, müssen wir es nur zur Liste der Formatierer in Global. asax. cs hinzufügen: Das ist es Sie können sehen, wie Könnte dies leicht erweitert werden, um kompliziertere Serialisierungs - und Deserialisierungsaufgaben durchzuführen. Es gibt einen hübschen anstößigen Bug in iOS 7, speziell betrifft Geräte vor iPhone 5 und Non-Retina iPads. Ein UIViewController, der eine UIMapView hat, die die meisten / die ganze Ansicht aufnimmt, bewirkt, dass die BarTintColor entweder dunkelgrau oder klar wird und die Farbe nicht wieder in die ursprüngliche Farbe geändert werden kann. Ich habe eine Bug-Anfrage mit Apple abgelegt, und es wurde als Duplikat geschlossen. Vermutlich haben viele andere Leute in die gleiche Frage laufen. Sie können den Apple Developer Forum Thread für weitere Details. Aber Sie sind hier für Lösungen, so ist hier, was für mich gearbeitet. Die einfachste Lösung, wenn Sie sich nicht um den neuen Transluzenzstil für die UINavigationBar in iOS 7 kümmern, ist, die Transluzenz einfach im App-Delegaten oder Ihrem ersten View-Controller zu deaktivieren: Beachten Sie, dass Sie diese Eigenschaft für UIToolbar setzen müssen. Wenn Sie eine Symbolleiste in der Ansicht mit Ihrem UIMapView verwenden. Der feinkörnigere Ansatz ist, die Transluzenz einfach in den exakten UIViewController ein - und auszuschalten, der das Problem hat. Es muss getan werden, bevor die Ansicht erscheint, und nachdem sie verschwindet, um zu arbeiten. Hinweis: Dies ist definitiv ein Hack. Sein nicht glatt, sein nicht eine Lösung, sein eine chaotische Umgehung, die nicht perfekt ist. Die nächste Ansicht dauert ein oder zwei Sekunden, um zurück zu transluzent, aber es funktioniert gut für mich und ist nicht zu aufdringlich. Wenn Sie zum Developer Forum Thread gehen. Sehen Sie einige andere Lösungen, die für verschiedene Leute arbeiteten. Für meine Situation waren diese bei weitem die einfachste zu implementieren. Heres eine Liste der üblichen Dinge, die ich verwenden musste, um unsere Apps von iOS 6 auf iOS 7 zu aktualisieren, während die Abwärtskompatibilität zu iOS 6 aufrechterhalten wurde. Bar Tint Color (UINavigationBar und UIToolbar) iOS 7 führte ein neues Attribut barTintColor ein. IOS 7 verwendet jetzt tintColor. Um auf die Textfarbe in der Leiste zu verweisen. Ein ähnliches Code-Konstrukt wird zum Tönen einer UIToolbar verwendet: UINavigationBar Title Farbe Leider hilft die Einstellung der Farbtonfarbe nicht mit der Titelfarbe für die Navigationsleiste. Das muss mit der Methode setTitleTextAttributes: dictionary: festgelegt werden. Die nette Sache ist, dass dieses eine Ausseheneigenschaft ist, also muss sie nur einmal im AppDelegate gesetzt werden, wenn Sie wünschen, wenn alle Ihre Navigationsstäbe die gleichen Textattribute benutzen. Es gibt ein paar weitere Textattribute, die festgelegt werden können. Anzeigen von Zeilen hinter Navigationsleiste Wenn Sie Ihre App für iOS 6 oder früher erstellt haben, wird Ihr Inhalt jetzt hinter der lichtdurchlässigen Navigationsleiste in iOS 7 angezeigt. Dies liegt an der Eigenschaft edgesForExtendedLayout. Sie können schnell sagen, iOS nicht auf Ihr Layout zu verlängern, indem Sie es auf UIRectEdgeNone. Oder verwenden Sie eine der anderen Optionen. Icons Turn Flat Blue Viele Ihrer Schaltflächenabbildungen und anderen Icons machen nun standardmäßig ein flaches System blau. Dies geschieht häufig in UIButton und UISegmentedControl. Dies kann durch das Setzen von imageWithRenderingMode: auf UIImageRenderingModeAlwaysOriginal behoben werden. UITableView Zellen sind weiß iOS 7 entschieden, dass Tabelle Ansicht Zellen standardmäßig auf weiße Farbe anstatt erben die Hintergrundfarbe der übergeordneten Tabelle anzeigen. Sie können Ihr vorheriges Verhalten zurück, indem Sie die Zellen Hintergrundfarbe klar in tableView: willDisplayCell: forRowAtIndexPath: Erstellen eines Apple Developer-Account kann ein verwirrend und langwierig. Es gibt mehrere Punkte, wo Sie links Gefühl, als ob der Prozess abgeschlossen ist, nur um herauszufinden, ein paar Tage später, dass es noch ein paar Schritte zu ergreifen. Beginnen Sie auf der Apple Developer Website Entweder verwenden Sie Ihre vorhandene Apple ID oder erstellen Sie eine neue. Wählen Sie aus dem Member Center das iOS Dev Center aus, sobald Sie eingeloggt sind. Wählen Sie Developer Programm von der rechten Seite der Seite aus. Klicken Sie auf die Schaltfläche Jetzt registrieren, und wählen Sie Ihr Entwicklungsprogramm aus. Dieser Bildschirm fasst die erforderlichen Schritte zusammen, um die Registrierung abzuschließen. Folgen Sie den Schritten und Anweisungen auf den folgenden Seiten. Wählen Sie das für Sie passende Entwickler-Programm: Individuell Wenn Sie keine registrierte Firma und keine DUNS-Nummer haben, ist dies die richtige Lösung für Sie. Unternehmen Wenn Sie Apps unter Ihrem Firmennamen an den App Store verteilen möchten und eine registrierte Firma und eine DUNS-Nummer haben, wählen Sie diese Option. Sie sollten eine neue Apple ID erstellen, da Sie die Möglichkeit haben, einen Firmennamen als Entwickler-ID zu verwenden. Enterprise Wenn Sie Apps intern innerhalb Ihrer Organisation und nicht im App Store verteilen möchten. Wählen Sie diese Option. Sie müssen auch eine registrierte Firma und eine DUNS-Nummer haben. Sobald Sie den Vorgang abgeschlossen haben, überprüft Apple Ihre Daten und kontaktiert Sie in etwa 3 Werktagen mit den letzten Schritten, um Ihre Registrierung abzuschließen. Wenn Sie die E-Mail von Apple erhalten, folgen Sie den Links, um den Vorgang abzuschließen und die 99 (oder 299) zu bezahlen, um Ihr Konto zu aktivieren. Wenn Sie noch nicht bezahlt haben, ist Ihr Entwicklerkonto nicht vollständig und Sie werden nicht in der Lage sein, Apps zum App Store zu senden oder Apps in Ihrem Unternehmen zu verteilen. Allerdings können Sie Xcode herunterladen und mit der Programmierung auf Ihrer großen App beginnen. Hinzufügen Ihres Entwicklers zu Ihrem Entwicklerkonto ist von wesentlicher Bedeutung, wenn Sie Ihre Unterstützung bei der Verteilung Ihrer Apps zum Testen und zur Übermittlung Ihrer Apps an den App Store benötigen. Sie müssen sie an zwei verschiedenen Stellen hinzufügen: Zuerst auf der Entwickler-Website: Stellen Sie sicher, dass Sie Ihren Entwickler erhalten Admin Level-Zugriff Add Developer Team Mitglied Zweitens auf iTunes Connect: melden Sie sich bei itunesconnect. apple an Wählen Sie Benutzer verwalten Wählen Sie iTunes Connect User Top links aus , Wählen Sie Add New User Geben Sie Entwickler-Info und E-Mail-Adresse Hit Next Wählen Sie Rolle Technical Weiter Für Benachrichtigungen wählen Sie Worldwide App Status Speichern Tiny Mission hat vor kurzem unser neues Projekt: Tiny Candidate gestartet. Mit dieser App, die für Android, iOS und mobiles Web verfügbar ist, können Kampagnen jeder Größe die mobile Revolution zu einem vernünftigen Preis nutzen. Als politische Kandidat, können Sie erreichen mehr Wähler durch Tiny Candidates einzigartige Share-Funktion, die Supporter Vorlagen für die gemeinsame Nutzung Ihrer Nachricht mit den Unterstützern Freunde und Familie gibt. Sie erhalten Freiwillige durch die App, indem Sie Aktivitäten spezifizieren, die ein Unterstützer sofort tun kann, um Ihrer Kampagne zu helfen und ihnen zu erlauben, sich oben zu registrieren, um auf Ihrer freiwilligen Liste für mehr beteiligte Aufgaben zu sein. Sie erhalten mehr Spenden durch die Donate-Seite auf Tiny Candidate, wo ein Unterstützer kann schnell und einfach geben Sie eine Spende über Paypal. Ihre Unterstützer sehen Realzeitupdates Ihres Twitter Zufuhr, Ereignisliste und Fotos durch kleinen Kandidaten. Dies ist die beste und einfachste Möglichkeit, mit Ihren Anhängern verbunden zu bleiben und die meisten Wähler während Ihrer Kampagne zu erreichen. Das einfach zu bedienende Web-Dashboard, das mit Ihrer Tiny Candidate-Anwendung geliefert wird, ermöglicht es Ihnen, alle Ihre Branding - und Event-Informationen einfach an einem Ort einzugeben. Besuchen Sie tinycandidate und mailen Sie uns für weitere Informationen. Ich habe vor kurzem lief in ein Problem mit einer benutzerdefinierten Schriftart Ich war mit einem Projekt. Das Label auf UIButton löschte viele Buchstaben am Anfang und am Ende des Labels, obwohl mein Button sehr breit und sehr groß war. Nach einer Menge Frustration, entschied ich schließlich, dass ich gehen würde, um meine eigene Schaltfläche Umsetzung machen. Sie sehen, Apple (oder wer auch immer die UIButton-Klasse) entschieden, um die Breite der Schaltflächen-Label auf der Grundlage der berichteten Breite der Schriftart Buchstaben automatisch zu berechnen. Ich kam zu diesem Schluss nach einer Menge Forschung und eine Menge Vermutung. Das Problem kommt vor allem mit kursiven und kursiven Schriftarten. Diese Schriftarten sind entworfen, um die Buchstaben für eine schönere Wirkung zu verschachteln. Die Art, wie sie nisten ist, dass der Font-Designer tatsächlich zieht den Brief absichtlich außerhalb seiner berechneten Grenzen. Dies ermöglicht es, zwei kursive Buchstaben zu berühren und andere Arten von Briefen näher zusammen zu sein, so dass ein Buchstabe wie f nicht ungewöhnlich weit weg von einem Buchstaben t aussieht. Die Schriftart, die entworfen ist, um außerhalb der Kiste zu sein, ist so allgemein, dass ich nicht glauben kann, dass Apple so etwas tun würde, die Breite des Etiketts auf der Grundlage der Buchstabenbreitenberechnungen zu berechnen. Es gibt keine Möglichkeit für Sie, den Entwickler, diese Berechnung zu überschreiben, um dieses Etikett breiter zu machen. Ich werde nicht liegen Ich verbrachte 3 Tage fuming bei Apple für diese Chaos für mich. Und dann ging ich auf Business-Unterklassen UIButton. Bevor: Nachher: In vielen Fällen wäre das Platzieren eines Labels mit einem transparenten Hintergrund über dem Button ausreichend, und es macht wahrscheinlich mehr Sinn, das zu tun, wenn man damit wegkommt. Allerdings habe ich diese Tasten um den Bildschirm bewegt und mit den vorgefertigten Tasten Aktionen wie touchUpInside. EinstellenHighlighted. SetSelected. Etc und ich wollte nicht all das verlieren, indem Sie eine benutzerdefinierte UIView, die sah aus wie eine Schaltfläche. Die Antwort war zu subclass UIButton. Ich suchte das Internet ziemlich viel, um sicherzustellen, dass ich es richtig (Ich wollte nicht, dass der Code Id bereits geschrieben, die UIButton verwendet verlieren) und eine Menge von Posts sagte Dinge wie Sie schräg Subclass UIButton, sollten Sie eine Kategorie , Oder schlichte alte es klingen so kompliziert niemand wollte es versuchen. Ich habe Unterklasse UIButton, war es nicht kompliziert, und es funktioniert sehr gut in meiner Anwendung. Heres den Code: Und um die Schaltfläche zu implementieren, können Sie nicht mehr verwenden buttonWithType. Müssen Sie die Methode alloc / init verwenden: LetterTileButton letterTile LetterTileButton alloc initWithFrame: letterFrame Und dann können Sie alle normalen Eigenschaften-Setter verwenden, da Sie sie in Ihrer Unterklasse überschreiben. Es ist eigentlich nicht so schwer zu subclass UIButton letterTile setTitle: myTitle forState: UIControlStateNormal letterTile setFont: myFont // Dies ist meine benutzerdefinierte Schriftsatz-ID wie ein Web-Framework bekannt zu geben Ive gearbeitet hat, die die Kotlin-Sprache für die JVM verwendet. Sein genanntes Kara, und während sein noch im Alpha Stadium, hat es eine Tonne kühle Eigenschaften. Ich habe immer vage Behauptungen, dass NSDateFormatter ist teuer, aber nie wirklich viel beachtet. Aber jetzt habe ich erlebt, dass Kosten aus erster Hand und wollte meine konkrete Erfahrung zu sehen, wie teuer sie sind zu teilen. Ich hatte Code sehr ähnlich der folgenden: Dieser Code dauerte 5,5 Sekunden ausgeführt werden. Ich war die Ausführung bis zu 10-mal, was für fast eine volle Minute der Ladezeit für meine Ansicht, die diese Informationen verwendet. Das Ändern des Codes, um so auszusehen, reduzierte die Ausführungszeit auf 2 Sekunden, die bis zu 20 Sekunden zum Laden endete: Mit ein paar weiteren Optimierungen konnte ich meine Ladezeit noch weiter senken, bis zu 5 Sekunden. Aber mit der einfachen Optimierung der Wiederverwendung meiner NSDateFormatter, war ich in der Lage, meine Ladezeit von 60 zu reduzieren. So verwenden NSDateFormatter mit Vorsicht und Wiederverwendung es in Ihrem View Controller, wann immer möglich. Es ist schwer, sich nicht in die Geräte und Anwendungen, die dieses mobile Ökosystem umgeben zu verlieben. Wir haben das Vergnügen, Unternehmen dabei unterstützen zu können, ihre App-Ideen zu artikulieren und zu implementieren, aber wir inspirieren uns auch selbst. Wir verwenden ständig die besten Apps in unserem persönlichen und beruflichen Leben. Viele der Verbindungen und Fähigkeiten der Tiny Missions kommen von den Anwendungen, die wir auf einer täglichen Basis verwenden. Das Klischee zu sagen, wie viel mobile Technologie ermöglicht es uns, die Zeit und Grenzen zu überschreiten, indem sie uns mehr verbunden, aber diese Werkzeuge haben unser Leben in einer Weise, die wir nicht hätte vorstellen können. Ich wollte unsere Lieblings-Apps für Arbeit und Spiel zu teilen. Apps, die wir täglich nutzen und unser Leben vereinfachen. Wenn Sie über die Entwicklung einer Anwendung denken, darüber nachzudenken, wie Ihre Lieblings-Anwendungen verbessern, was Sie tun und sind fast ein Unterbewusstsein Teil des Tages. Auch darüber nachzudenken, was unsere Lieblings-Apps arent. Wir glauben nicht, dass die Verwendung von Apps, um ein Unternehmen zu vermarkten attraktiv ist. Apps sollten niemals nur eine verherrlichte Website oder Kontaktkarte sein. Apps sollten eine Notwendigkeit lösen oder eine Lösung für ein Problem erstellen. Teilen Sie uns Ihre Favoriten in den Kommentaren mit. Ich benutze Evernote, um Notizen zu machen, jedesmal wenn ich zu einer Besprechung gehe. Ich benutze es, um jede Interaktion, die ich mit einem Client oder einem Mitarbeiter. Ich kann auf diese Bibliothek von Notizen auf jeder Plattform und jedem Gerät zurückblicken, da alles schnell synchronisiert wird. Ich habe festgestellt, Bezug auf Notizen nach Standort mit dem Geotagging macht Tracking meine Gespräche so viel einfacher. Die Suchfunktionen sind fantastisch, da kann ich ein Stichwort eingeben und relevante Hinweise finden. Sie hat nicht eine fantastische Stiftfunktion oder die Fähigkeit, Fotos zu annotieren, aber sie hält Bilder, Sprachnotizen und Text an einem Platz. Unentbehrlich und am besten von allen kostenlos. Dieses Foto und Web Annotation App wurde gerade von Evernote gestartet. Sie gehen Hand und Hand mit einem gemeinsamen Login zu halten, was Sie skitch zugänglich in Ihrem Notebook. Mit Skitch können Sie Fotos, Karten und Webseiten einfach kommentieren. Greifen Sie eine schnelle URL, schreiben Sie einige Notizen, und teilen Sie es. Ich habe es benutzt, um Design-Ideen von bestimmten Webseiten hervorzuheben und zu beachten. Cribbing, was ich mochte und dann teilen sie mit dem Team. Ich habe auch verwendet, um ein schnelles Foto zu schießen und fügen Sie einige Notizen über Änderungen. Sein einfaches, durch etwas inspiriert zu werden, aber, wenn Sie nicht einen Moment nehmen, um zu erfassen, warum hinter der Inspiration Sie nicht wissen, warum Sie die Anzeige nahmen. Nicht nur ein großer E-Reader, verwende ich iBooks als Repository für alle pdfs, die ich empfange. Die Synchronisierung ist einfach und der Leser ist schnell. Es gibt so viele PDF-Reader und Annotating-Anwendungen, aber wenn Geschwindigkeit und einfacher Zugriff ist wichtig, können Sie nicht schlagen das Tool, das Apple erstellt hat. Als iMessage weltweit verwendet, hat whatsapp in mein Messaging-System der Wahl. Aus der Preissenkung von Textnachrichten heraus erwachsen, verwendet dieses die Datenverbindung auf Ihrem Telefon, um Mitteilungen über Plattformen zu teilen. Android und Apple-Geräte arbeiten mit der gleichen App. Es ist nicht kostenlos, aber Sie werden einfach sparen Sie die SMS-Kosten. Sie können Gruppen-Konversationen schnell und anpassen fast alles über die App. Dies verbindet die Notwendigkeit von SMS mit der Geschwindigkeit eines Online-IM-Systems. Halten und teilen Sie Dateien überall. Wieder ein weiteres Cross-Plattform-Juwel, das zu einem perfekten Ort gereift hat, um viele verschiedene Arten von Dateien zu halten. Einfache Einrichtung auf einem Desktop können Sie Ihre wichtigsten Dateien zur Hand haben. Ich habe noch zu einem Pro-Konto zu aktualisieren, da Raum wächst und wächst. Einfach zu aktualisierende Links zu teilen. Die Magie der Bildschirmfreigabe über Plattformen. Ich habe dieses verwendet, um grundlegende Störungssuche mit Klienten zu tun. Ich habe sie gebeten, ihren Bildschirm über die Joinme-Website zu teilen und magisch kann ich darauf hinweisen, die Klicks. Mit der Kurzwahlfunktion können Sie den Konferenzcode als Konferenzrufcode verwenden. Wenn Sie havent versucht diese App auf Ihrem Gerät oder Computer einfach Starten der App wird Ihnen eine Million Ideen, wie Sie es in Ihrem täglichen Leben verwenden. Tolle. Eine schnelle und sichere Remote-Desktop-Anwendung, die volle Video auf dem iPad unterstützt. Manchmal müssen Sie wieder in Ihren Computer und das ist bei weitem das beste. Seine so schnell, dass auf einer stabilen Verbindung können Sie, was Streaming-Video wie hulu. Melden Sie sich auf Ihrem Computer schnell und erhalten Sie eine Datei, die Sie benötigen. Zeichnen und skizzieren mit einer schönen Oberfläche. Ideal für das Ausmalen von Diagrammen und Diagrammen. Ich habe dies als Mini-Whiteboard auf meinem iPad während kleiner eins zu einem Treffen mit Mitarbeitern verwendet. Die minimale Schnittstelle und einfache Werkzeuge ermöglichen einige wirklich kreative Zeichnungen. Sketches und Doodles sehen toll aus und Sie sind nicht mit einer Million Optionen. Dieses ist nicht irgendein verherrlichtes Farbenprogramm für den ausführlichen Künstler. Dies ist eine App, um Ideen aus dem Kopf und auf Papier zu bekommen. Apps, die ich versuche, in meinem täglichen Leben zu integrieren: Tapose ist ein anderes alles in einem Notiz - und Synchronisierungswerkzeug. Ich finde es zu langsam für echte Arbeit, aber ich sehe so viel Potenzial. Es ermöglicht Ihnen, auf Notizen zusammenzuarbeiten. Onlive Desktop war ein nützliches Spielzeug für die Verwendung von echten Kalkulationstabellen. Die Office-Anwendungen auf dem iPad und iPhone sind ausgezeichnet, aber manchmal müssen Sie versucht und wahre Excel. Sie können beachten, dass ich nichts über eine Zeitkarte oder Zeit-Management-Software teilen. Wir haben unsere eigenen geschrieben, dass wir intern verwenden. Ich denke, die meisten Start-ups haben eine Time-Tracker-Software, um ihren Wert zu beweisen. Persönliche Apps Ich liebe Wenn Sie ein iOS-Gerät haben Sie wahrscheinlich Flipboard. Es ist ein perfekter Nachrichtenaggregator und mein erster Halt, wenn ich sehen will, was in der Welt los ist. Die Zeitschriftentwurfarbeiten und sein das beste twitter Leser dort draussen. Es ist die App, die beginnt und endet mein Tag. Zwei Anwendungen zu hören NPR-Streams während der Arbeit weg auf etwas anderes. NPR Newsreader ist eine hervorragende Möglichkeit, Artikel zu durchsuchen. Ich verwende die App hauptsächlich für das Hören von Radiosendungen. Prüfen Sie Instagram-Fotos auf einer weltweiten Karte. Möchten Sie sehen, wie das Leben in Portugal ist, nur eine Nadel und sehen Sie die lustigen Bilder, die Pop-up. Siehe lokale Menüs, da die meisten Menschen verwenden Instagram zu teilen, was sie essen. Redditors vereinen Alien Blue ist ein Dritter Reddit-Reader, der schnell und macht Spaß. Mindlessly klicken Verbindungen, wie Sie sehen, was das Internet zu bieten hat. Ich mag, dass Sie zwei Panels auf dem iPad, dass Sie den Link sehen können. Klicken Sie niemals wieder auf die Schaltfläche "Zurück" in Ihrem Browser. Einfache App, um herauszufinden, was wikipedia Artikel um Sie sind auf der Grundlage von Ort. Ich habe es ausgiebig für Reisen, wenn ich klicken und frage mich, wo ich bin. Erfahren Sie einige Geschichte um Sie herum und es Links zu Google Maps, so können Sie dort zu Fuß. Ich würde gerne sehen, diese wiederum in eine benutzerdefinierte Walking-Anwendung. Fragen Sie einen Nomaditunes. apple/us/app/ask-a-nomad/id446302438mt8 Sie können lokalisierte Fragen stellen, wohin Sie reisen und eine Antwort von einem lokalen erhalten. Sein gewesen ein wertvolles Werkzeug für das Reisen und das Herausfinden der Baby freundlichen Positionen in den Städten. Im sure the quality of result is based on the amount of users in the area, but I have loved the responses from major cities across Europe. The list of games I play is enormous. Im not ashamed to say the bulk of the Apps I have ever purchased are games. To find the best new games can be tough and this has been my goto site for some time. The new app links reviews and discussion boards. If you want to understand what people want from their applications dive into the discussion board and get raw responses from the most advanced users. They have a fun weekly podcast as well that you can listen to. I hope you enjoyed the peek at my iPad and you can see the influence that great design, speed, and daily use have on making a great app. The list of abandoned apps is getting very long, so our goal is to make your app stick. A couple months ago, we had the need to implement RSS feeds in several apps we were working on. Upon surveying the existing options for parsing RSS on Android, we realized theres no good solution. The de facto standard for Java RSS parsing seems to be Rome. but they apparently dont support Android out of the box. There are rumors that Android support will be added at some point in the future, but that doesnt really do us much good right now. The rest of the results were people talking about how easy it is to roll your own RSS parser. This may be true, but I was hoping to find something that was a drop-in solution (like the awesome MWFeedParser for iOS). Not finding anything suitable, I decided to write my own. Enter TinyRSS. Its an Android library that contains a very fast SAX - based parser and a configurable ListView imeplementation to display the feed results. Its easy to setup and configure, with overridable options in the Activity and completely customizable styles. Theres an example application included. Best of all, its Open Source. So, check it out on GitHub . BEARBEITEN. Updated for the new iPad retina display Every time I have to make some icons for an app, I always have to go look up the sizes for each platform. So, I figured Id make a post with the sizes (including actual-sized boxes, of course), and links to the relevant design documents from each manufacturer. Apple and Google both provide guidelines for designing application icons, and its worth checking them both out. They have different approaches to icon composition, since iOS wants each icon to be inside a rounded-square box with a glossy highlight and drop shadow, and Android encourages taking advantage of the alpha channel and using unique shapes. Technically, you can turn off the glossy highlight on your iOS home screen icon, but most developers seem to leave it on. Heres a quick list of the information to give to your developer so that they can submit your app. It has now been updated for iPhone 5 and the latest App Store requirements Company Name If this is your first app, you have to choose your company name. This is the name that displays in the App Store for all of your apps and cannot be changed once you choose it. App Name This is the name that appears for the app in the App Store. Display Name (Limited to 12 characters) This is the name that appears under the icon on the iPhone. It can be the same as the app name, but is often a shorter version App Icon a 1024px x 1024px icon that displays in the app store. This can be the same image used as the app icon on the actual device Copyright something like 2012 Company Name Marketing Description This appears on the app store and is used to describe your app. Use this space to explain what it does, who should use it, any subscription, payment, or login requirements. Put the most important information at the top. There is no limit on the length of this description. It can be changed any time, even after the app is in the App Store. Keywords These are the terms that help people find your app in the App Store. The limit is 100 characters, including commas and spaces. There is no need to include the exact app name in the keywords, but a common variation of the app name might be handy. These can only be changed when a new version of the app is created and before it is reviewed. Category and Secondary Category Determine which categories your app falls into. The secondary category is optional. Price How much do you want to sell your app for Screenshots Your developer can likely take screenshots, but they need to know which screens you want featured on the App Store. To take screenshots yourself, hold the top button and tap the home button of your iOS device. The screenshots will now be in the Photos app on your iPhone or iPad. Screenshots are required to be 640920 or 640960 for iPhone and 6401096 or 6401136 for iPhone 5. For iPad, they must be 7681004 or 7681024. All screenshots can be portrait or landscape Here is a guest submission by one of our developers, Hahnemann. The background for this article is that we needed to show inline email attachments in our clients Outlook accounts. This was a long battle, as Outlook has some quirks regarding attachments that I find to be antiquated after having seen inline attachments with other email systems for the last 3 years. Happy holidays and happy new year Bekki The process of composing an email using iOS is fairly simple. The MFMailComposeViewController class provides a standard interface to compose and send an email as follows: If you want to include an attachment, you need to reference the attachment and send it inside a message to the class instance. Here is an example that attaches a file containing HTML : This works great, except for one problem. Email clients such as Gmail and Outlook will not display the attachment text inline. The attachment will be included in a preview pane for the user to open or select in order to display or download. This is a common feature used by most email clients to increase security and privacy. The trick to make the attachment appear inline is to convert it to an image first, compose your email in HTML format, and attach the image instead. Obviously not all attachments can be converted to images (e. g. a SQL database) but our example contains markup that can be transformed to a JPEG or PNG when rendered inside a UIWebView. So funktioniert das. First, you have to render the HTML inside a UIWebView that is hidden from the user: Next, you need to wait for the UIWebView to render the HTML before creating the image, or the image itself will be blank or incomplete. This is done inside the webViewDidFinishLoad instance method that is invoked by the UIWebView delegate when it finishes loading a frame. Notice we use here a performSelector that calls a separate method named composeEmail after a delay of one second, just enough time for the render process to finish before composing the email. The method needs the webView because this is where the markup is rendered: Finally, in composeEmail you create and save the image to your Documents app folder, before you attach it. Remember the email has to be in HTML format: There are other recommended ways to do this, such as including images using Base64 encoding. This appears to work, but you also need control of the MIME standard in the code and unfortunately iOS does not allow this. If we ever decide to develop another Blackberry app, it will be for 3x the cost of the iOS and Android version, 3x the timeline, and 3x the heartburn medicine. Here are my top reasons why I hate Blackberry development: 1) The simulators There is a different simulator for every combination of device, OS, and carrier. Do they really expect developers to do that much testing just because they cant be bothered to create consistency between their products 2) The devices I can go on and on about these, but my biggest gripes are all of the permissions and settings that have to be manually set to use features like Wifi and databases. Without a BB data plan, we cant even use the GPS. which means a lot of just to test our apps. 3) The code signing Anyone who has seen Apples code signing process might think that it cant get any worse. But BB takes the cake again In order to test on a device, a developer has to request keys which take up to 2 hours to receive. Then they have to be code signed against the BB server every time you build the app for a device. This means that I have to enter my key password (once per Eclipse launch). But then that means that their signing server must be online for you to get your work done. All this is tolerable until you find out that they take their signing server offline for maintenance almost every evening, US time. So if you dont live in the US or if you program at night (like we frequently do), you are completely unable to test during those hours. 4) The emails Oh the emails. Every time this code signing process occurrs, RIM sends me a confirmation email for every single. cod file that was signed. For illustration, here is my trash bin just from today . Yes, that number says 500. Supposedly, this is for security and cant be disabled, but I say that if I auto-filter these all to my trash bin, the security has been rendered moot. 5) The documentation Most of the documentation reads like it was written by a marketing person, not a developer. Case and point, this article that supposedly tells developers how to upgrade their apps to OS 7: devblog. blackberry/2011/06/blackberry-7-simulators/ It is so vague and high level that it isnt actually helpful in any way. The documentation that is actually written by a technical person is so short and terse that I generally have to google half of the instructions to get the actual instructions. 6) The OSs I dont even know where to begin. I cant build an app for OS 6 and have it work reasonably well in OS 7. I have to build two apps and submit them to both versions of App World in order to get to all of the users. 7) The online support I guess Im spoiled by how much online material, support, forums, tutorials there are for iOS and Android, so the lack of options for BB are shocking to me. There is some guidance on the BB forums and on stackoverflow, but its so contaminated with posts from 2009 that are completely irrelevant (due to the complete lack of backwards compatibility with older OSs) that it almost isnt worth it. Its really apparent that there arent too many BB developers out there. 8) The User Interface BB has done a great job of convincing us to use the simplest user interfaces, which are completely unimaginative and pretty ugly compared to iOS and Android. Im sure all the users who like the joystick/mouse of the BB appreciate having boring lists of information that are easy to scroll through and select, but there is so much more possible. But this hasnt even addressed my rant about the UI. My real issue is that they have to be build completely in code. There is no UI layout builder to quickly put together a pretty UI. Since everything is done by hand in code, it takes a long time, a lot of guess and check, and doesnt encourage being creative. 9) Not Mac OS X compatible This might not be a huge deal for some developers, but I prefer to have just one computer and that happens to be a Mac. Eclipse is Mac OS compatible, Java is Mac OS compatible, but for whatever reason, the Blackberry Plug-In for Eclipse isnt. There is a Mac beta out now, but its buggy and doesnt work well with simulators. I dont have high hopes for it based on the quality of the rest of the BB development tools. I use a virtual machine at this point, and it does the job. The entire Blackberry development environment feels like it was hacked together. Nothing is cohesive and nothing just works. Every step of the way is a struggle of troubleshooting and figuring out what is unhappy now and then figuring out how to fix it. I wish that my time was being spent debugging and improving my apps, but instead I deal with SD Card Missing, cant debug errors. Like most iOS developers, we have been spending a lot of time rushing around getting all of our apps ready for iOS 5. It has been trying, to put it mildly. Simple things that weve taken for granted ever since iOS 3.0 suddenly dont work, but leave very little debugging trace for us to follow. After countless hours researching and debugging, and now that the NDA is gone, heres the list of biggest issues weve found: Modal View Controllers self. parentViewController is now nil in iOS5, so any code like this self parentViewController dismissModalViewControllerAnimated: YES will no longer work. In iOS5, change this to self dismissModalViewControllerAnimated: YES , but if you want to maintain backwards compatibility with iOS 4.x, you will need to add a conditional because this wont work in the older versions. More Modal View Controllers In iOS5, suddenly some of my modal view controllers werent presenting at all. They worked great in older iOS versions. It turns out that iOS guidelines dont want model view controllers to be presented in viewDidLoad or in viewWillAppear, but this was not enforced in pre iOS5 versions. I guess I got pretty lazy in this respect and had a few modals presented in viewDidLoad. Especially in instances where I wanted to show a login or loading screen. After moving all of these self presentModalViewController:ctrl animated:NO calls to (void)viewDidAppear:( BOOL )animated, they now work. Sounds great, but theres still one more step the benefit of using viewDidLoad to present these is that its only called once when the view is loaded, but viewDidAppear is called (as you can guess) every time the view becomes visible. So for this to work, make sure to set a flag that makes sure the modal view controller snippet only gets called once. For me, it looks like this: View Lifecycle Changes I ran into this issue while firefighting some major customer complaints, so the exact process I took to solve this isnt perfectly clear in my brain. But heres the bottom line After ( BOOL )application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions, the order that viewDidLoad in the root or first view gets called has changed. In iOS5, viewDidLoad gets called right away, where in older iOS versions, (void)applicationDidBecomeActive:(UIApplication )application got called before viewDidLoad. This probably wont affect too many apps, but we happened to be checking for updates there and were taking action in viewDidLoad based on the results. Once again, this was tough to solve while maintaining backwards compatibility. UIWebView Issues This one just came up this morning, where the app crashes after I load a PDF file into a UIWebView and then pop the view controller. Once again, no issues pre iOS5, and this error has the joy of no stack trace and no debugging information. Im still researching the issue and will update this post when I figure it out. The webview issue seems to have been a fluke with the debugger. If I remove the Break on all Exceptions breakpoint, it functions fine. Before removing that breakpoint, I tried pressing play again after it stopped at the exception. Go figure, it would continue running the app without issue. After some additional research on Stack Overflow, many others had this exact issue and were all able to solve it by removing the exception breakpoint. As a Windows/Linux user whos spending most of his time on OS X these days, there are several little features that I miss. One of them is the ability to create a new file from directly within the file browser (i. e. Finder). Well, I guess Im not the only one, as I found this awesome little script called New Text File Here: Just download the. app file, start editing your finder toolbar, and drag the app into an empty space. The current version prompts you for a file name and automatically opens it in a text editor after its created. Great stuff Linking to the App Store from directly within your application is a great way to let people know about your other apps or to upgrade from a free version to a paid version. Doing this is actually quite simple. Just put a button in your app and link the action to the following code: If you want to link to all of your apps: For some reason, this seems like a difficult thing to google for and can often lead to people doing things the wrong way, so Ill show how simple it is to do PDF rendering in iOS. The problem: you have an iPhone or iPad app that does some custom drawing inside a subclass of UIView. Now you want all of your awesome graphics to be exported to a PDF so you can either archive it or share it with people who dont have your app. Unfortunately, a lot of people google around for a solution and end up finding some really convoluted examples using CGPDFContextCreateWithURL and making CFDictionaries. While you may be able to come up with a working solution using the CF and CG functions, its not much more complicated than most people need. Luckily, UIKit has some very handy helper functions in UIKit for doing exactly this. Assuming youre insde a subclass of UIView that does rendering in its drawRect method, heres how you generate a PDF called fileName at path: Its that simple. UIGraphicsBeginPDFContextToFile creates a PDF context and sets it as the current UIKit context. Thus, all rendering operations on the current context will be directed to the PDF instead of the screen, until you call UIGraphicsEndPDFContext. The result is a PDF generated with native drawing commands, often much smaller yet better quality than an image capture of the view. HINWEIS. If youre rendering text in your UIView, make sure you use text rendering methods like my string: drawAtPoint: instead of placing UILabels over the view. The labels wont be rendered to the PDF . When making user interfaces in MonoTouch, as with anything, its often desirable to create a custom view class to display your content to the user. When using MonoTouch and Interface Builder, this is as easy as: Add a UIView to your interface by dragging over the View item from the library Go to the Identity tab of the properties panel and change the Class field to the name of your custom class. Add your class to the project and make sure it inherits UIView or one of its subclasses. Ive run into a minor problem doing this, but reading around the internet it seems like it might not happen to everyone. If you get an error like: Unknown class in Interface Builder file. you simply need to add a MonoTouch. Foundatoin. RegisterAttribute to the class definition, like: Last weekend we got bored and threw together a HTML5/Javascript-based online button generator. Its called TinyButtonator. and it lets you define the buttons size, border, rounded corners, and a variety of stylized gradient background. Its written in Javascript and uses the HTML5 Canvas API to do the rendering, all client-side. The buttons can be exported as PNG images with transparent backgrounds. You can also save the button as a permalink to bookmark or send to someone else. There are a lot of similar websites out there, but none of them quite fit our needs. So we ended up spending a ton of time messing around in Photoshop or Inkscape making simple button images. We want something simple that looks nice, and theyre always a bit different. TinyButtonator gives us exactly that. Its totally free, so go ahead and try it out Below are instructions for installing an application on your iOS device using Ad Hoc Distribution. The process is tricky the first few times you attempt it, so follow the instructions very closely. Once youve done it a few times, it gets much easier. There are three sections to this article: The first time you install your application onto your iOS device Installing an update to your existing iOS application FAQ Or, Frequently Encountered Issues The first time you install your application onto your iOS device: Make sure you have given your iOS device UDID to your developer The developer will send you a mobile provision file and an ipa file containing the application Many email programs dont allow ipa files to be emailed, they may choose to post it somewhere for your to download as opposed to emailing it Save both the application ipa file and the mobile provision file to your computer in an easy to find location, such as your desktop Launch iTunes Drag the mobileprovision file into the left pane of iTunes under the Library section Drag the file called appname. ipa (where appname is the name of the application) into the left pane of iTunes under the Library section. You will see the mouse turn into a small plus sign when you hover over the Library section. This indicates you are in the correct place. Plug in your iOS device and select it from the left pane in iTunes Navigate to the Apps tab (along the top of iTunes) for your device and verify that the application is in the list and has a checkmark next to it. The app will have a white icon next to it in iTunes the real icon will be present on your device. Press the Sync or Apply button at the bottom of the iTunes window Launch the application on your iOS device If you encounter any problems, check out the FAQ below or contact your developer directly Installing an update to your existing iOS application: Delete the existing application from your device To do this, press and hold down on the application icon on your device until it shakes and a small X appears Tap the X, and confirm that you wish to delete it Did the developer send you a new mobileprovision file If yes, save the mobileprovision file to your computer in an easy to find location, such as your desktop Drag the new mobile provision file into the left pane of iTunes under the Library section When asked if you wish to overwrite the existing file, press the Yes button Save the application ipa file to your computer in an easy to find location, such as your desktop Drag the file called appname. ipa (where appname is the name of the application) into the left pane of iTunes under the Library section. You will see the mouse turn into a small plus sign when you hover over the Library section. This indicates you are in the correct place. Plug in your iOS device and select it from the left pane in iTunes Navigate to the Apps tab for your device and verify that the application is in the list and has a checkmark next to it. The app will have a white icon next to it in iTunes the real icon will be present on your device. Press the Sync or Apply button at the bottom of the iTunes window Launch the application on your iOS device If you encounter any problems, check out the FAQ below or contact your developer directly FAQ Or, Frequently Encountered Issues The application was not installed on the because the signer is not valid. Verify that you have dragged the mobile provision file into iTunes. Verify that you are attempting to install the application onto a device that has been authorized by your developer. Each device must be registered to install the application. If the mobile provision profile was issued more than 6 months ago, verify with the developer that it has not expired. The application was not installed on the because it requires a newer version of iOS software. Many iOS features are only compatible with newer iOS versions, and are not backward compatible. Verify with your developer what minimum iOS is required for your application. You cant open the application because it is not supported on this type of Mac. Did you double click the application icon If so, OS X attempted to open the application as a Mac application. Instead, drag the application icon into iTunes. It still appears that the old version of the application is on my iOS device Delete the application from your iOS device, following the instructions in the Installing an update to your existing iOS application section, item number 1 Continuing through those instructions, reinstall your application. Andy and I have been experimenting with MonoTouch on a few projects. For the most part it has been really good, especially for a few C developers like us. However this week, XCode 4 came out and broke the link that MonoTouch uses with Interface Builder. Im sure that the MonoTouch team is hard at work fixing this issue, but I was planning to submit one of my apps this week and cant (easily) update one of my UI screens without going through a lot of trouble re-installing the old version of XCode. Until MonoTouch fixes this issue, I will have to spend a lot of time looking for workarounds. Third party tools can be great, but remember that there is always the risk of an inconvenient update being released In apps that use Core Data and UITableView, it is very likely that you are also using NSFetchedResultsControllerDelegate to update the table view automatically. This feature is incredibly useful, but I ran into a strange issue with it. After a lot of searching and experimenting, I found a solution. Here it is for you in case you run into the same thing with one of your projects. Cause . Two views that perform a fetch request on the same entity in your database, and both implement NSFetchedResultsControllerDelegate. Result . After making an update on one of the table views and attempting to save the managed object context, you receive EXCBADACCESS, with very little information. After setting NSZombieEnabled YES. I was able to see this message in the console: - MyViewController controllerWillChangeContent:: message sent to deallocated instance What was interesting to me is that I wasnt in MyViewController, I was actually making the save in MyOtherViewController, but the change was being caught by the controllerWillChangeContent: method in the other view controller. Solution . Buried deep within the Core Data programming guide the simple solution was to be sure to always set fetchedResultsController to nil after the view disappears. I was releasing it in the dealloc function, but that wasnt enough it needs to be set to nil. To make sure that it gets set to nil right away, I implemented viewWillDisappear: and put the code in there. Problem solved Awhile ago we spoke about using web apps with native wrappers as a good way to get your app to the widest audience over a large number of devices. This is done by creating a Javascript application and wrapping it in a native application using a web view for the specific platform. To store data and user settings in the application, use HTML5s sessionStorage. This is where some of the issues with cross platform development come in. Not all smart phone browsers have implemented HTML5 compatibility. For instance, Blackberry just started offering it in their devices running OS 6.0 and higher. At the time of this writing, Blackberry was still shipping devices with OS 5.. This means that 90 of the Blackberry devices wont be able to run your application. In addition, Windows Phone 7 does not enable HTML5 in their native browser. So you can see that there are already a few snags in the silver bullet idea of cross platform development. We just wrapped up a large cross-platform project, which is why Ive chosen to revisit this topic now. This particular project involved accessing a database through web services, modifying data on the user specific device, and syncing that data back to the server. Other features include the ability to send an email through application and view videos and websites. Our original plan was to have 99 of the application live in the Javascript code, with native wrappers for the iOS and Android platforms and a web URL for all other platforms. We quickly ran into issues with this when the iOS browser wouldnt display several icons and toolbars in the jQuery Mobile template that we chose. After a lot of searching, we finally decided to implement the Tab Bar natively for iOS and Android. This was our first step toward making the application more native than originally planned. The next issue we ran into was that the jQuery code couldnt force the native app to change tabs. So we implemented several catches in the native code where, depending on which tab they were in, where depending on the users input, we would navigate and drive the application to a certain state or page, or ask another page to refresh. Already, the native code is getting more complex, and there is a lot of specific communication that was required between the jQuery and native code. Our application required a user to log in before using it, and this created another spot where we chose to have the native code take over. This was to primarily to create a more simple and intuitive user experience. Instead of loading the login page into one of the tab views, we chose to put it into a modal view, one that took up the whole page and covered up the tabs. The native code had to catch the login request and reroute it to a modal view. Once the user logged in, the modal view was dismissed and the tabs were now visible. Similar things came up when we wanted to launch the email client and select other configuration preferences. Many selections the user made in one tab required the view in another tab to refresh, but there was no way for the jQuery to do this directly, forcing us to perform the refresh within the native code. As we progressed through the project, there were more and more issues with the different platform browsers that we had to handle by adding to the native wrappers and adding more code to the jQuery to check for these situations. Once the project was finished, the ratio of native code to jQuery was about 30/70, with most of the code being platform-independent. The 30 was still far more than we expected to have to duplicate on each platform. However, the app works well and we are very happy with the way it turned out. The biggest benefit to going with javascript on this application is that we built in a way to update the javascript code over the network without having to release a new revision of the native code. With the long iOS approval process and the tight timeline we were under, the remote updating ability was invaluable. Cross platform worked well in this situation, but it is far from the magic solution that many assume. The next time someone asks us to make a cross platform application for them, we will be well armed with the pros and cons and the true cost (due to the 30 native wrappers) and will be able to help our client determine if this is the best option for them. Periodically, someone will call us to ask if well buy their app idea from them. We always say no, although we have entered into partnerships with several clients whose ideas we really liked. I never had a specific reason for saying no, beyond the vague idea that paying someone for an idea and then doing all the work myself seems silly. I just read Rework by Jason Fried and David Heinemeier Hansson, the founders of 37Signals, and they summed up my vague idea better than I ever could have. The authors advise us to go make something, that an idea alone is basically worthless because everyone has one. They use the specific example of eBay it doesnt matter how many people thought of the eBay idea, it matters that the founders of eBay actually did something with that idea. Everyone has ideas, but what makes a great product is executing on that idea. The authors go on to explain that executing on your own idea is the best way to create a great product. This is because you are passionate about the idea, you know why you need the product or how it will make your life better. They call it scratching your own itch. Another person cannot see your idea the layout, the flow, the users, etc the way you can. But it goes further than that. Most great ideas come from a specific area of expertise or domain knowledge. The value in that case isnt in your idea, its in you. Its in the expertise and vision that you bring to the table, the idea is empty without the wealth of knowledge from the person who came up with the idea. When we develop an app for a client, its the client driving the look, feel, and features of the app throughout the process. Thats why we dont buy ideas. Most of our applications are data-driven, either from a local data source within the application, or downloaded to the application from a database on a server. One great way of getting data into an application is using an XML document. But the iOS XML parser is slow Weve had a few applications with fairly complex data models take over a minute to complete parsing. Since a one-minute loading time is completely unacceptable, weve implemented a few different strategies for speeding it up. Applications that get their data from a server can either stream the data or save it locally to be referenced later. We generally tend to allow the data to be saved on the device so that our clients apps will be more useful to their users when network access is flaky or non-existent. Depending on the web service, we download the data in XML or JSON format. I prefer to then load the data into a Core Data sqlite database, especially if the user is going to be modifying or adding to the data. Core Data can be a pain sometimes, but it is really fast, and manages a lot of things for us behind the scenes. In order to improve the initial user experience, we often seed the application bundle with an initial data set. This way, the user can use the app right away, regardless of network connection and data-syncing time. We could seed the app with an XML file containing the data, but like I said, it is slow My favorite thing to do is actually to run the XML parsing in the iOS Simulator to generate a sqlite database from the seeded data set, and then include that database into the bundle. This bypasses the initial parsing issue and gives a great user experience. The user wont notice any loading time, and the application will perform fetches to retrieve the data at the appropriate time. Heres how to do it: Run your app with the XML parsing in the simulator, loading the data into your Core Data database. Navigate to the Documents folder for your simulators files LibraryApplication SupportiPhone SimulatorY. YApplications XXXXXXXXXXXX DocumentsAppName. sqlite Where Y. Y is the iOS version number you are testing (currently, the latest is 4.2) Where XXXXXXXXXXXXXXX is the random number assigned to your application in the simulator click through the list of these until you find your app inside Where AppName. sqlite is the name of your database (likely the same name as your project) Copy the sqlite database into your project folder Go into XCode and add that sqlite database to your project In the persistentStoreCoordinator method, either in the app delegate or root view controller file, add the following code to copy your database from the bundle to the Documents folder: And thats it, now youve seeded your app with your most recent data to avoid downloading and parsing data when the user first uses your app. I just got back from giving a presentation on mobile applications for business at the Apple Store Ridgedale. I discussed common app architectures for mobile applications and the required systems for each. I thought I would post them here for you all to see. Genießen
No comments:
Post a Comment