XCODE PROJECT AUTOMATION FOR MULTIPLE SIMILAR APP BY PYTHON SCRIPT
In app store I have over 50 dictionary applications by a single codebase. There are different constant files, different database and different icon set.
Every time when I modify the project manually for different language, it takes roughly 5 minutes. So I thought why not write a script to do the task automatically. And now it takes 3 seconds to modify my XCode project for different language app.
To make the job done, I select Python scripting language. Python is quite easy language to learn and have extensive library. Last time I wrote Python script in 2007 so its 10 years later I wrote another script.
In this blog post, I will share some common functions of the Python script which I think quite helpful to do similar job.
1. Importing some library in my script
import os
import shutil
import subprocess
import plistlib
2. Remove icon directory with files
try:
removeIcons = "/app_directory/app_name/Images.xcassets/AppIcon.appiconset"
shutil.rmtree(removeIcons)
print("Icons deleted")
except:
print("ERROR: Icons not found")
3. Copying directory with files function
ref: pythoncentral.io
import errno
import shutil
def copy(src, dest):
try:
shutil.copytree(src, dest)
except OSError as e:
# If the error was caused because the source wasn't a directory
if e.errno == errno.ENOTDIR:
shutil.copy(src, dest)
else:
print('Directory not copied. Error: %s' % e)
Just call copy(src, dest) function and provide the directory path correctly it will perform the copying perfectly.
4. XCode project has .plist files. To modify .plist file
def pListModification():
bundleName = "MY APP"
bundleIdentifier = "net.myapp"
plistNote ="app_directory/app_name/" + "/App/App-Info.plist"
plistNoteData = plistlib.readPlist(plistNote)
plistNoteData['CFBundleDisplayName'] = "New My App"
plistNoteData['CFBundleIdentifier'] = "net.newmyapp"
plistNoteData['CFBundleName'] = "New My App"
plistlib.writePlist(plistNoteData, plistNote)
5. Opening XCode project by Python Script
def openNotesXcodeProject():
print("My App XCODE OPENING")
pathToOpen = "/app_directory/app_name/"+ "App.xcworkspace"
openFile = "open " + "'" + pathToOpen + "'"
os.system(openFile)
Hope it helps if you do similar job by Python script. Also during writing the script I take quick reference of Python language from this site tutorialspoint.com/python/
Originally published in my blog: thinkdiff.net