Skip to content

Instantly share code, notes, and snippets.

@vhbit
Forked from ishaq/KUtils.h
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vhbit/f69a71b3750785ed6260 to your computer and use it in GitHub Desktop.
Save vhbit/f69a71b3750785ed6260 to your computer and use it in GitHub Desktop.
iOS versioning from DVCS
#import <Foundation/Foundation.h>
@interface KUtils : NSObject
+ (NSString *)getVersionInfo;
@end
#import "KUtils.h"
@implementation KUtils
+ (NSString *)getVersionInfo
{
// NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
// NSString *shortVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString *fullVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"FullVersion"];
NSString *productName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
NSString *appVersionInfo = [NSString stringWithFormat:@"%@ version: %@", productName, fullVersion];
return appVersionInfo; // app version would contain something like this "AppName 0.0.0-8-90ee99d-dirty"
}
@end
#!/bin/bash
# This script automatically sets the version and short version string of
# an Xcode project from the Git repository containing the project.
#
# To use this script in Xcode, add the contents to a "Run Script" build
# phase for your application target.
# NOTE: make sure you add a new value to your Info plist called "FullVersion"
#
# NOTE: if you receive error saying 'fatal: Not a git responsitory', make sure |--git-dir| points
# to the root dir of your repo
#
# NOTE: if your git repo has no tags, this would fail, so make sure you create at least one tag
# (I usually create a tag '0.0.0' at the very first commit, you can do the same).
set -o errexit
set -o nounset
INFO_PLIST="${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Info"
# Get git tag and hash in the FullVersion
FULL_VERSION=$(hg -R "${PROJECT_DIR}" log -r . --template '{latesttag}-{latesttagdistance}-{node|short}')
# Use the latest tag for short version (You'll have to make sure that all your tags are of the format 0.0.0,
# this is to satisfy Apple's rule that short version be three integers separated by dots)
# using git tag for version also encourages you to create tags that match your releases
SHORT_VERSION=$(hg -R "${PROJECT_DIR}" log -r . --template '{latesttag}')
# But Apple wants this value to be a monotonically increasing integer, so
# instead use the number of commits on the master branch. If you like to
# play fast and loose with your Git history, this may cause you problems.
# Thanks to @amrox for pointing out the issue and fix.
VERSION=$(hg -R "${PROJECT_DIR}" log -r . --template '{rev}')
defaults write "$INFO_PLIST" CFBundleShortVersionString $SHORT_VERSION
defaults write "$INFO_PLIST" CFBundleVersion $VERSION
defaults write "$INFO_PLIST" FullVersion $FULL_VERSION
echo "VERSION: ${VERSION}"
echo "SHORT VERSION: ${SHORT_VERSION}"
echo "FULL VERSION: ${FULL_VERSION}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment