<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Jaysquared</title>
	
	<link>http://www.jaysquared.com</link>
	<description>Mobile and Webdevelopment</description>
	<lastBuildDate>Tue, 08 May 2012 09:07:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Jaysquared" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jaysquared" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Checklist: What to do before posting to the App Store?</title>
		<link>http://www.jaysquared.com/2012/04/checklist-what-to-do-before-posting-to-the-app-store/</link>
		<comments>http://www.jaysquared.com/2012/04/checklist-what-to-do-before-posting-to-the-app-store/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 08:37:31 +0000</pubDate>
		<dc:creator>Jaysquared</dc:creator>
				<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://www.jaysquared.com/?p=416</guid>
		<description><![CDATA[After my bad experiences with nasty bugs in my release versions I will compile a list of checkpoints to tick before archiving the release version. Feel free to post any additions. Clean Target, Clean Build Folder and delete Derived Data Set Version to Release (especially if you have an Adhoc Build) Use Static Analyzer to [...]]]></description>
			<content:encoded><![CDATA[<p>After my bad experiences with nasty bugs in my release versions I will compile a list of checkpoints to tick before archiving the release version. Feel free to post any additions.</p>
<ol>
<li>Clean Target, Clean Build Folder and delete Derived Data</li>
<li>Set Version to Release (especially if you have an Adhoc Build)</li>
<li>Use Static Analyzer to find obvious memory issues</li>
<li>Use Instruments to find less obvious memory issues</li>
<li>Use Release-safe versions of Apple-provided code templates. e.g. for <a title="Improved persistentStoreCoordinator for Release" href="http://www.jaysquared.com/2012/04/improved-persistentstorecoordinator-for-release/">persistentStoreCoordinator</a></li>
<li>Select a Release-Certficiate for code signing</li>
<li>When releasing for older devices: Build for armv6 and armv7</li>
<li>Check size is under 50MB (if possible) by exporting it as .ipa</li>
<li><a href="http://www.cimgf.com/2009/01/24/dropping-nslog-in-release-builds/" target="_blank">Use your own version of NSLog, which is disabled for Release</a></li>
<li>Don&#8217;t use [[UIDevice currentDevice] uniqueDeviceIdentifier]. Also check third-party modules.</li>
<li>Check third-party modules for useful updates.</li>
<li>Enable Game Center, Leaderboards and Achievements in Itunesconnect</li>
<li>Send In App Purchases for review with your app</li>
<li>Make a copy of your development dir as a fallback solution, if some errors should occur in future updates</li>
<li>Don&#8217;t load too much in the AppDelegate, as startup time for an app is limited to around 20-25 seconds and you&#8217;ll get an &#8220;<code>failed to launch in time</code>&#8221; error. It only appears in Release and Adhoc Builds, not in debug Builds</li>
</ol>
<p>This is work in progress and open for discussion. I will compile a nice PDF Version, if I think it is complete and I can find the time.</p>
<img src="http://feeds.feedburner.com/~r/Jaysquared/~4/ce1zB2YKyiA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jaysquared.com/2012/04/checklist-what-to-do-before-posting-to-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improved persistentStoreCoordinator for Release</title>
		<link>http://www.jaysquared.com/2012/04/improved-persistentstorecoordinator-for-release/</link>
		<comments>http://www.jaysquared.com/2012/04/improved-persistentstorecoordinator-for-release/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 02:06:20 +0000</pubDate>
		<dc:creator>Jaysquared</dc:creator>
				<category><![CDATA[Objective C Snippets]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[core data]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.jaysquared.com/?p=361</guid>
		<description><![CDATA[The problem with my situation at the moment, not devoting full time for app development is lack of time to learn, test and calm down. As I am working 50+ hours in an Investment Bank I might have failed to coin in my success with Find the Location. But that will change in 1 month [...]]]></description>
			<content:encoded><![CDATA[<p>The problem with my situation at the moment, not devoting full time for app development is lack of time to learn, test and calm down. As I am working 50+ hours in an Investment Bank I might have failed to coin in my success with Find the Location. But that will change in 1 month :).</p>
<p>I included a nasty bug, which was caused by reliance to Apple provided standard methods and lack of cleaning derived data before archiving for the App Store. I use Core Data Model Versioning and somehow Migration didn&#8217;t work, so the around 1,000,000 users couldn&#8217;t use the app, when they updated. As I included ads for monetization I now had either users which couldn&#8217;t start the app or users which used the old version without ads.<br />
<span id="more-361"></span><br />
I now cleaned up my persistentStoreCoordinator to support migration and have a fall back if that should fail for any reason. For reference this is the original method provided by Apple&#8217;s template in XCode.</p>
<pre class="brush: objc; title: ; notranslate">
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
  if (__persistentStoreCoordinator != nil) {
    return __persistentStoreCoordinator;
  }
  NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@&quot;fbexclusive.sqlite&quot;];
  NSError *error = nil;
  __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
  if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&amp;error]){
    /*
    Replace this implementation with code to handle the error appropriately.

    abort() causes the application to generate a crash log and terminate.
    You should not use this function in a shipping application, although it may be useful during development.
    If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application
    by pressing the Home button.

    Typical reasons for an error here include:
    * The persistent store is not accessible;
    * The schema for the persistent store is incompatible with current managed object model.
    Check the error message to determine what the actual problem was.

    If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is
    pointing into the application's resources directory instead of a writeable directory.

    If you encounter schema incompatibility errors during development, you can reduce their frequency by:
    * Simply deleting the existing store:
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

    * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
    [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    Lightweight migration will only work for a limited set of schema changes; consult &quot;Core Data Model Versioning and Data Migration Programming Guide&quot; for details.

    */
    NSLog(@&quot;Unresolved error %@, %@&quot;, error, [error userInfo]);
    abort();
  }

  return __persistentStoreCoordinator;
}
</pre>
<p>Even when using model versioning, it leads to this error, when you make changes to the model:</p>
<blockquote><p>The model used to open the store is incompatible with the one used to create the store</p></blockquote>
<p>So first thing is to include lightweight migration by providing the respective options NSDictionary:</p>
<pre class="brush: objc; title: ; notranslate">
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&amp;amp;error]) {
</pre>
<p>I included that as soon as I turned on Model Versioning and it worked just fine in development, but somehow created a bug in the Release version, so I included a fallback, checking for errors:</p>
<pre class="brush: objc; title: ; notranslate">
      [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
      [__persistentStoreCoordinator release];
      __persistentStoreCoordinator = nil;
      return [self persistentStoreCoordinator];
</pre>
<p>This is the complete version of my method I am using now.</p>
<pre class="brush: objc; title: ; notranslate">
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{
  if (__persistentStoreCoordinator != nil) {
    return __persistentStoreCoordinator;
  }
  NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@&quot;jaysquared.sqlite&quot;];
  NSError *error = nil;
  __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];&lt;/code&gt;

  NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
  [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
  [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

  if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&amp;amp;error]){

      [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
      [__persistentStoreCoordinator release];
      __persistentStoreCoordinator = nil;
      return [self persistentStoreCoordinator];
  }

  return __persistentStoreCoordinator;
}
</pre>
<p>I hope this is of any use for you and could save you some headaches. If you have further improvements I am more than happy to include them in the post.</p>
<img src="http://feeds.feedburner.com/~r/Jaysquared/~4/jGpr3pjzveY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jaysquared.com/2012/04/improved-persistentstorecoordinator-for-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find the Location game translated to Japanese</title>
		<link>http://www.jaysquared.com/2012/04/find-the-location-game-translated-to-japanese/</link>
		<comments>http://www.jaysquared.com/2012/04/find-the-location-game-translated-to-japanese/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 18:54:55 +0000</pubDate>
		<dc:creator>Jaysquared</dc:creator>
				<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://www.jaysquared.com/?p=342</guid>
		<description><![CDATA[There are many geat services that bring together translators and people looking to reach a global audience. Through clever search engine optimization by offering a localization guide for iPhone, I found iCanLocalize.com. I translated Find the Location Game from English to French, Spanish and Japanese. In total the app has 573 words and it just [...]]]></description>
			<content:encoded><![CDATA[<p>There are many geat services that bring together translators and people looking to reach a global audience. Through clever search engine optimization by offering a localization guide for iPhone, I found <a href="http://iCanLocalize.com" target="_blank">iCanLocalize.com</a>. I translated Find the Location Game from English to French, Spanish and Japanese. In total the app has 573 words and it just cost 40 USD per language. I thought maybe the game was a one hit wonder for a short period of time (top 1 iPhone/iPad + around 1 month Top 25) just in Germany. After the translation it hit top 3 iPhone in France too. Let&#8217;s see what is yet to come. I don&#8217;t unterstand anything in the screenshot below&#8230;.</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-368" title="Find the Location translated to Japanese" src="http://www.jaysquared.com/wp-content/uploads/2012/04/iOS-Simulator-Bildschirmfoto-22.04.2012-11.54.17-640x426.png" alt="" width="640" height="426" /></p>
<img src="http://feeds.feedburner.com/~r/Jaysquared/~4/ioMm8O6s7RQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jaysquared.com/2012/04/find-the-location-game-translated-to-japanese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Youapp.cn</title>
		<link>http://www.jaysquared.com/2011/05/youapp-cn/</link>
		<comments>http://www.jaysquared.com/2011/05/youapp-cn/#comments</comments>
		<pubDate>Fri, 20 May 2011 10:28:41 +0000</pubDate>
		<dc:creator>Jaysquared</dc:creator>
				<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://www.jaysquared.com/?p=138</guid>
		<description><![CDATA[Today I was contacted from a chinese platform called youapp.cn. They asked for promotion codes for one of my apps. I tried their offer by providing codes for Spin The Bubbly. Let&#8217;s see if this has any effect&#8230; Update: Now they published something on their site: http://www.youapp.cn/forum.php?mod=viewthread&#38;tid=8990&#38;highlight=bubbly With Google Translator I can make a wild [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was contacted from a chinese platform called youapp.cn. They asked for promotion codes for one of my apps. I tried their offer by providing codes for Spin The Bubbly. Let&#8217;s see if this has any effect&#8230;</p>
<p><strong>Update:</strong> Now they published something on their site: <a href="http://www.youapp.cn/forum.php?mod=viewthread&amp;tid=8990&amp;highlight=bubbly" target="_blank">http://www.youapp.cn/forum.php?mod=viewthread&amp;tid=8990&amp;highlight=bubbly</a></p>
<p>With Google Translator I can make a wild guess, but it doesn&#8217;t look that positive&#8230;</p>
<img src="http://feeds.feedburner.com/~r/Jaysquared/~4/jnYlVAKStQw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.jaysquared.com/2011/05/youapp-cn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

