<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>webfraggle &#187; apple</title>
	<atom:link href="http://www.ketzler.de/tag/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ketzler.de</link>
	<description>Christoph Ketzler&#039;s Blog</description>
	<lastBuildDate>Tue, 03 Jan 2012 13:30:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Build an iPad app in a few hours.</title>
		<link>http://www.ketzler.de/2011/09/build-an-ipad-app-in-a-few-hours/</link>
		<comments>http://www.ketzler.de/2011/09/build-an-ipad-app-in-a-few-hours/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 11:08:29 +0000</pubDate>
		<dc:creator>webfraggle</dc:creator>
				<category><![CDATA[Appcelerator Titanium]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[Appcelerator]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[Studio]]></category>
		<category><![CDATA[Titanium]]></category>
		<category><![CDATA[Titanium Studio]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.ketzler.de/?p=687</guid>
		<description><![CDATA[The challenge: &#8220;We need a small iPad app. Just four buttons, every button opens a video. Today!&#8221; I thought, &#8220;OK&#8221;. I had only a freshly installed Mac and an Apple developer account. Install Appcelerator Titanium Studio Update the SDK to 1.8 Go through the Apple Certification Process to get a new private key, your certificate [...]]]></description>
			<content:encoded><![CDATA[<p><strong>The challenge: </strong><br />
&#8220;We need a small iPad app. Just four buttons, every button opens a video. Today!&#8221;<br />
I thought, &#8220;OK&#8221;. I had only a freshly installed Mac and an Apple developer account.<br />
<span id="more-687"></span></p>
<ol>
<li>Install <a href="http://www.appcelerator.com/" target="_blank">Appcelerator Titanium Studio</a></li>
<li>Update the SDK to 1.8</li>
<li>Go through the Apple Certification Process to get a new private key, your certificate and a provisioning profile</li>
<li>Setup a new project in Titanium Studio</li>
<li>Code and test the app</li>
</ol>
<p>And I love Appcelerator Titanium because these few lines had done the job:</p>
<pre class="brush: jscript; title: ; notranslate">Titanium.UI.setBackgroundColor('#000');
Titanium.UI.orientation = Titanium.UI.LANDSCAPE_LEFT;
win = Titanium.UI.createWindow({
    title:'win1',
    backgroundColor:'#fff',
    navBarHidden:true,
    fullscreen:true
});
win.orientationModes = [ Titanium.UI.LANDSCAPE_LEFT ];

var videoPlayer = Titanium.Media.createVideoPlayer({
      backgroundColor:'#000',
      movieControlMode:Titanium.Media.VIDEO_CONTROL_FULLSCREEN,
      scalingMode:Titanium.Media.VIDEO_SCALING_ASPECT_FIT,
      autoplay:false,
      visible:false
});

videoPlayer.addEventListener('complete',function(e)
{
		videoPlayer.stop();
		videoPlayer.hide();
		Ti.UI.iPhone.hideStatusBar();
		win.hideNavBar();
});

var bg = Titanium.UI.createImageView({image:'img/bg.png',top:0,left:0,width:1024,height:768});
win.add(bg);

var button = Titanium.UI.createButton({
   backgroundImage:'img/btn.png',
   width: 442,height:228,top:155,left:65
});

var button2 = Titanium.UI.createButton({
   backgroundImage:'img/btn2.png',
   width: 442,height:228,top:155,left:519
});

var button3 = Titanium.UI.createButton({
   backgroundImage:'img/btn3.png',
   width: 442,height:228,top:398,left:65
});
var button4 = Titanium.UI.createButton({
   backgroundImage:'img/btn4.png',
   width: 442,height:228,top:398,left:519
});

button.addEventListener('click',buttonClicked);
button2.addEventListener('click',buttonClicked);
button3.addEventListener('click',buttonClicked);
button4.addEventListener('click',buttonClicked);
win.add(button);
win.add(button2);
win.add(button3);
win.add(button4);
win.add(videoPlayer);
win.open();
Ti.UI.iPhone.hideStatusBar();
win.hideNavBar();

function buttonClicked(e)
{
   var videoUrl = &quot;&quot;;
   switch (e.source)
   {
   		case button:
   			videoUrl = 'videos/video01.mp4';
   		break;
   		case button2:
   			videoUrl = 'videos/video02.mp4';
   		break;
   		case button3:
   			videoUrl = 'videos/video03.mp4';
   		break;
   		case button4:
   			videoUrl = 'videos/video04.mp4';
   		break;
   }
	showVideo(videoUrl);
}

function showVideo(w)
{
	videoPlayer.setUrl(w);
	videoPlayer.show();
	videoPlayer.play();
}</pre>
<p>And the whole job was only done in about two hours.</p>
<p><a href="http://www.ketzler.de/wp-content/uploads/2011/09/iPadApp.jpg"><img src="http://www.ketzler.de/wp-content/uploads/2011/09/iPadApp.jpg" alt="" title="iPadApp" width="500" height="368" class="aligncenter size-full wp-image-690" /></a></p>
<p>]]></content:encoded>
			<wfw:commentRss>http://www.ketzler.de/2011/09/build-an-ipad-app-in-a-few-hours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resign an iPhone App, insert new Bundle ID and send to Xcode Organizer for Upload</title>
		<link>http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/</link>
		<comments>http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 12:01:47 +0000</pubDate>
		<dc:creator>webfraggle</dc:creator>
				<category><![CDATA[Adobe Flash Platform]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[codesign]]></category>
		<category><![CDATA[ipa]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[organizer]]></category>
		<category><![CDATA[packager for iphone]]></category>
		<category><![CDATA[profile]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[resign]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[validate]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.ketzler.de/?p=587</guid>
		<description><![CDATA[The challenge: Create a Flash App, pack it with the Packager for iPhone with my certificate and provisioning profiles, send it to the client that he can resign it with his informations and import it into Xcode Organizer for validating and uploading to the App Store. I did some research and found out that all [...]]]></description>
			<content:encoded><![CDATA[<p>The challenge: Create a Flash App, pack it with the Packager for iPhone with my certificate and provisioning profiles, send it to the client that he can resign it with his informations and import it into Xcode Organizer for validating and uploading to the App Store.<br />
<span id="more-587"></span><br />
I did some research and found out that all signing processes in Xcode (while building or resigning in Organizer) is done with a tool called codesign. This tool can also be used via Terminal. I tried it with my Flash .ipa and the included .app. It worked.</p>
<p>But because it is difficult always to use the terminal with more lines long commands I decided to develop a little AIR tool using the new NativeProcess API.<br />
<br/><br/><br />
And here is how it works:<br />
<br/><br/><br />
<strong>1. Select the .ipa.</strong><br />
<a href="http://www.ketzler.de/wp-content/uploads/2011/01/02.png"><img src="http://www.ketzler.de/wp-content/uploads/2011/01/02-300x232.png" alt="" title="02" width="300" height="232" class="alignnone size-medium wp-image-591" /></a><br />
<strong>What is executed:</strong><br />
Old files in this directory are deleted.<br />
The .ipa will be unzipped.<br />
<code>unzip -o /path/to/YourApp.ipa -d /path/to</code><br />
Find the first .app file inside /Payload.<br />
Load the Info.plist file.<br />
Use the CFBundleExecutable as the binary filename.<br />
<br/><br/><br />
The current Signing Authority is read and the entitlements were extracted. The entitlements are needed, because without them the Xcode Organizer can&#8217;t sign the app with a new Provisioning Certificate.<br />
<code>codesign -d -vv --entitlements "/path/to/entitlements" /path/to/Payload/YourApp.app/YourApp</code><br />
<br/><br/><br />
<strong>2. Sign it with a new Signing Authority.</strong><br />
Enter your new Signing Authority. The correct String can be copy&#038;pasted via your keychain.<br />
<a href="http://www.ketzler.de/wp-content/uploads/2011/01/04.png"><img src="http://www.ketzler.de/wp-content/uploads/2011/01/04-300x232.png" alt="" title="04" width="300" height="232" class="alignnone size-medium wp-image-594" /></a><br />
<a href="http://www.ketzler.de/wp-content/uploads/2011/01/keychain.png"><img src="http://www.ketzler.de/wp-content/uploads/2011/01/keychain-300x236.png" alt="" title="keychain" width="300" height="236" class="alignnone size-medium wp-image-595" /></a><br />
<br/><br/><br />
<strong>3. Enter new Bundle Identifier (App ID Suffix)</strong><br />
This must match with your App ID created in the Apple Developer Provisioning Portal.<br />
<a href="http://www.ketzler.de/wp-content/uploads/2011/01/05.png"><img src="http://www.ketzler.de/wp-content/uploads/2011/01/05-300x232.png" alt="" title="05" width="300" height="232" class="alignnone size-medium wp-image-596" /></a><br />
<br/><br/><br />
<strong>4. Resign App and change App ID.</strong><br />
The binary will be resigned with your new informations.<br />
<strong>What is executed:</strong><br />
First, codesign with your extracted entitlements:<br />
<code>codesign -f -s "New Signing Authority" -i "new.bundle.id" --entitlements "/path/to/entitlements" -vv /path/to/Payload/YourApp.app/YourApp</code><br />
Second, change the the Bundle Identifier also inside the Info.plist file.<br />
<br/><br/><br />
<strong>5. Send it to Xcode Organizer for validating and uploading</strong><br />
After clicking the button open Xcode and go to Window > Organizer<br />
<a href="http://www.ketzler.de/wp-content/uploads/2011/01/041.png"><img src="http://www.ketzler.de/wp-content/uploads/2011/01/041-300x215.png" alt="" title="04" width="300" height="215" class="alignnone size-medium wp-image-597" /></a></p>
<p><strong>How does this work:</strong><br />
This was a little bit tricky and needed much research how the Organizer wants the Apps.<br />
Every Archived Build is moved to /UserDir/Library/MobileDevice/Archived Applications/UUID.<br />
So first a UUID is generated an a directory with it is created.<br />
e.g. /UserDir/Library/MobileDevice/Archived Applications/8D3E5DF2-F079-4A3B-460D-5525A6C5472B</p>
<p>Then the .app file is copied to that location. But the Orgnanizer needs an ArchiveInfo.plist file with correct informations in it. </p>
<p>My tool uses a standard template and changes all needed information, so that they are matching the informations in your .apps Info.plist file. These are CFBundleIdentifier, CFBundleDisplayName, CFBundleVersion, MinimumOSVersion, DTPlatformVersion, DTSDKName, CFBundleExecutable, CFBundleDisplayName.<br />
Some other data needs to be generated out of other information. e.g. the UUID of the directory or the Archivedate.<br />
Apple counts dates from 01.01.2001 &#8211; 00:00:00. Surprising.<br />
<br/><br/><br />
That&#8217;s it.<br />
<br/><br/><br />
At the moment this works only with Flash iPhone Apps. I tried it quickly with another .ipa but it fails. I did no investigation in it because at the moment I didn&#8217;t need it.<br />
<br/><br/><br />
<strong>Tip:</strong><br />
Xcode Organizer fails silent. But you can look at the Terminal messages of codesign in your Console Log (Konsole in german). Maybe there you can find why validating or uploading fails.</p>
<p><strong>Downloads:</strong><br />
<a href='http://www.ketzler.de/wp-content/uploads/2011/01/iOSSendToOrganizer.dmg'>iOSSendToOrganizer.dmg Installer</a></p>
<p><strong>Source:</strong><br />
If you make changes or enhancements please share them with me<br />
<a href='http://www.ketzler.de/wp-content/uploads/2011/01/iOSSendToOrganizer.fxp'>iOSSendToOrganizer Source</a></p>
<p>]]></content:encoded>
			<wfw:commentRss>http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Warum ich Apple liebe&#8230;</title>
		<link>http://www.ketzler.de/2010/01/warum-ich-apple-liebe/</link>
		<comments>http://www.ketzler.de/2010/01/warum-ich-apple-liebe/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 23:02:57 +0000</pubDate>
		<dc:creator>webfraggle</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobiles internet]]></category>

		<guid isPermaLink="false">http://www.ketzler.de/2010/01/warum-ich-apple-liebe/</guid>
		<description><![CDATA[Warum ich Apple liebe: Situation, mein Chef und ich im Zug. Wir wollen beide mit unseren Rechnern ins Interent. Ich klappe mein MacBook auf, melde mich an, krame mein iPhone aus der Hose, schalte Bluetooth und Tethering ein, Klick, Klick, &#8220;mit iPhone verbinden&#8221; und ich kann mit meinen Kollegen chatten. W&#228;hrenddessen f&#228;hrt das teure Vaio [...]]]></description>
			<content:encoded><![CDATA[<p>Warum ich Apple liebe: Situation, mein Chef und ich im Zug. Wir wollen beide mit unseren Rechnern ins Interent. Ich klappe mein MacBook auf, melde mich an, krame mein iPhone aus der Hose, schalte Bluetooth und Tethering ein, Klick, Klick, &#8220;mit iPhone verbinden&#8221; und ich kann mit meinen Kollegen chatten. W&#228;hrenddessen f&#228;hrt das teure Vaio Business Notebook mit integriertem UMTS Modem nebenan noch hoch. Nach der Anmeldung und dem Starten des Verbindungsmanagers l&#228;sst sich die Sim nicht dazu &#252;berreden eine Pin abzufragen. Rumprobieren, Manager neustarten, geht nicht. Also noch mal runter und hoch fahren. Ich checke und beantworte inzwischen schon meine mails und chatte munter weiter. Nach dem Neustart kann er endlich eine Pin eingeben und ist online. Inzwischen habe ich sogar noch des Chefs iPhone gejailbreakt. Und darum liebe ich Apple Produkte. </p>
<p>]]></content:encoded>
			<wfw:commentRss>http://www.ketzler.de/2010/01/warum-ich-apple-liebe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

