Wednesday, March 8, 2017

Ridiculous Apple App Store rejection

My Items for Diablo 3 app has been in app store for years with 4.5 stars reviews from users got a rejection for a minor update. The reason was the following.

"We noticed that your app only includes links, images, or content aggregated from the Internet with limited or no native iOS functionality. We understand that this content may be curated from the web specifically for your users, but since it does not sufficiently differ from a mobile web browsing experience, it is not appropriate for the App Store."

Anyone that uses the app would know that the reviewer does not know what he is doing.

Wednesday, October 5, 2016

Xcode 8 automatic code signing problem with Jenkins

Xcode 8 automatic code signing is great. However if you try to use Jenkins to automate your app build with a specific provision profile, you would want to use manual code signing. What I wanted to do was use automatic code signing during development and use manual code signing with Ad-Hoc provision with Jenkins.

To switch from automatic to manual code signing, you need to change the following setting in the project file ([project name].xcodeproj/project.pbxproj).
Change "ProvisioningStyle = Automatic" to "ProvisioningStyle = Manual"
By default "ProvisioningStyle = Automatic" is not in the project.pbxproj. You just need to uncheck and check "Automatically manage signing" in app Target -> General in Xcode to add that setting.

Now in Jekins, you want to add this shell script before you run the Xcode build command to change "ProvisioningStyle = Automatic" to "ProvisioningStyle = Manual"

sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' [project name].xcodeproj/project.pbxproj

You can then use xcodebuild argument "PROVISIONING_PROFILE=xxxx-xxxx-xxxx" to use the provision profile you want.

Friday, March 25, 2016

Add tint to UIImage

I have been working on a SDK that allows user to customize colors for images. In many cases, I need to add an image to a button with different color at run time. So using just tintColor is not going to work. The following method will mask an image with the color you define.

- (UIImage *)maskWithColor:(UIColor *)color
    CGImageRef maskImage = self.CGImage;
    CGFloat width = self.size.width * self.scale;
    CGFloat height = self.size.height * self.scale;
    CGRect bounds = CGRectMake(0,0,width,height);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
    CGContextClipToMask(bitmapContext, bounds, maskImage);
    CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
    CGContextFillRect(bitmapContext, bounds);
    CGImageRef cImage = CGBitmapContextCreateImage(bitmapContext);
    UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:self.scale orientation:self.imageOrientation];
    return coloredImage;

Tuesday, January 20, 2015

Using xcodebuild To Export a .ipa From an Archive

Found this helpful article. 


Clean project

xcodebuild clean -project $projectname.xcodeproj -configuration Release -alltargets

Create project archive

xcodebuild archive -project $projectname.xcodeproj -scheme $schemename -archivePath $projectname.xcarchive

Create IPA

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile “Provisioning Profile Name”

Tuesday, December 23, 2014

Weather for your business?

A beautiful iPhone app before the year end. It is a business analytics app.
In App Store:

Wednesday, October 1, 2014

Directory with extra fun

Employee look up app with fun ideas.

Wednesday, September 24, 2014

VW Interactive Ad Unit

Built the API services for an Ad unit that is personalized for each CBS fantasy football team.
  • Each team plays 10 unique questions each week and earn points. 
  • Leader board for each league. 
  • History for last week's score.