Abizern (owner)

Revisions

gist: 208825 Download_button fork
public
Description:
Xcode build script that adds the commit sha to the CFBundleVersion
Public Clone URL: git://gist.github.com/208825.git
Embed All Files: show embed
git versioner #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env ruby
 
# Xcode auto-versioning script for Subversion by Axel Andersson
# Updated for git by Marcus S. Zarra and Matt Long
# Converted to ruby by Abizer Nasir
# Appends the git sha to the version number set in Xcode.
# see http://www.stompy.org/2008/08/14/xcode-and-git-another-build-script/ for more details
 
# These are the common places where git is installed.
# Change this if your path isn't here
common_git_paths = %w[/usr/local/bin/git /usr/local/git/bin/git /opt/local/bin/git]
git_path = ""
 
common_git_paths.each do |p|
  if File.exist?(p)
    git_path = p
    break
  end
end
 
if git_path == ""
  puts "Path to git not found"
  exit
end
 
command_line = git_path + " rev-parse --short HEAD"
sha = `#{command_line}`.chomp
puts sha
 
info_file = ENV['BUILT_PRODUCTS_DIR'] + "/" + ENV['INFOPLIST_PATH']
 
f = File.open(info_file, "r").read
re = /([\t ]+<key>CFBundleVersion<\/key>\n[\t ]+<string>)(.*?)(<\/string>)/
f =~ re
 
# Get the version info from the source Info.plist file
# If the script has already been run we need to remove the git sha
# from the bundle's Info.plist.
open = $1
orig_version = $2
close = $3
 
# If the git hash has not already been injected into the Info.plist, this will set version to nil
version = $2.sub!(/\s*git sha [\w]+/, '')
if (!version)
  version = orig_version
end
 
# Inject the git hash into the bundle's Info.plist
sub = "#{open}#{version}git sha #{sha}#{close}"
puts sub
f.gsub!(re, sub)
File.open(info_file, "w") { |file| file.write(f) }