[Pythonmac-SIG] Xcode 3.0 and Compiled Python Files?

Brian Berliner bb at brianberliner.com
Wed Apr 23 19:08:23 CEST 2008


On Apr 23, 2008, at 9:05 AM, Christopher Barker wrote:

> Brian Berliner wrote:
>> So, I'm using Xcode 3.0 with Python and Objective-C/Cocoa files  
>> intermixed.
>> Right now, I just do the Xcode "Build" process, which creates my  
>> foo.app package.
>
> I have no idea how Xcode builds a combined Python/ObjectiveC app. IN  
> fact, I didn't know it could do it at all -- is it embedding python?

I'm using the Apple-supplied Python in 10.5 Leopard.
And, at least for now, that is good enough, as it reduces my test  
burden.
I like that everything is neatly integrated into Xcode.
I just didn't like that I couldn't tweak the Xcode build to pre- 
compile the Python files.

>> Would py2app be appropriate for me,
>
> It sounds like XCode is building your app for you, if so, you don't  
> need py2app.
>
> Does the resulting app bundle work as a stand-alone on a stock  
> Leopard install?
>
> I'd take a look in the resulting app bundle and see what's there. It  
> may only have *.pyc files anyway, so you're done.

Looks like Xcode 3.0 just copies the .py files directly to the  
Resources folder in the bundle.
No processing whatsoever.
I can't find any easy way of changing that behaviour.
Anyone?

Yes, the App Bundle that Xcode generates works fine on a stock Leopard  
install (since Python is installed with every Leopard system).

I played around with setting up a build rule in Xcode for *.py files,  
but that force-compiled every .py file, and it appears that you cannot  
compile the "main.py" file and have things still work.

So, instead, I wrote the following "Run Script Phase" for the Target  
in Xcode (which runs as a last-step in the build):
================
#!/bin/sh
if [ "$ACTION" != "build" ]; then
	echo "$ACTION Complete"
	exit 0
fi

build_dir="${CONFIGURATION_BUILD_DIR}/$ 
{UNLOCALIZED_RESOURCES_FOLDER_PATH}"
if [ "${CONFIGURATION_BUILD_DIR}" != "" -a "$ 
{UNLOCALIZED_RESOURCES_FOLDER_PATH}" != "" -a -d "$build_dir" ]; then
	cd "$build_dir"
	for python_file in `find * -name '*.py' -print`; do
		if [ "$python_file" != "main.py" ]; then
			python -m py_compile "$python_file"
			rm -f "$python_file"
		fi
	done
fi

echo "Build Complete!"
exit 0
================

For some reason, I could not build with "python -O", as Python could  
not load my modules if they are *.pyo files. Bummer.

This may be good enough to get me going.

Now, any advice on an obfuscator?

> -- 
> Christopher Barker, Ph.D.
> Oceanographer
>
> Emergency Response Division
> NOAA/NOS/OR&R            (206) 526-6959   voice
> 7600 Sand Point Way NE   (206) 526-6329   fax
> Seattle, WA  98115       (206) 526-6317   main reception
>
> Chris.Barker at noaa.gov

-Brian



More information about the Pythonmac-SIG mailing list