Apple’s iOS operating system is built on Unix, which implies that you can take your Unix-based C code, wrap it around some Apple iOS UI goodness, and have an iPhone application.
(Well, it’s more complicated than that. But if you’re a crusty ol’ Unix hacker like myself, there is something gratifying being able to use fopen() and getenv() instead of Apple’s NS-wrapped calls to these same routines.)
So how do you know what the environment variables are that are available on your phone?
Simple: I wrote a simple iOS program which neatly displays all of the available environmental variables.
And the variables available appear to be:
- PATH: The path of available unix commands
- TMPDIR: The temporary directory path (points to the temp folder in your sandbox)
- SHELL: /bin/sh, natch.
- HOME: The home directory of your application (points to the root of your sandbox)
- USER: mobile, natch.
- LOGNAME: mobile
and some odd ones I’ve never seen:
- __CF_USER_TEXT_ENCODING = 0x1F5:0:0
- CFFIXED_USER_HOME, which appears to be the same as HOME
In a debug environment I’m seeing the additional oddball variables:
- CFLOG_FORCE_STDERR = YES
- NSUnbufferedIO = YES
- DYLD_INSERT_LIBRARIES = some path apparently on my host computer. (?)
Now this is on my iPhone running iOS 5.1; YMMV. Which is why I uploaded the program. Though it appears I would trust that both HOME and TMPDIR will both be available and point to the right place, and constructing the paths to the Documents and Library folders is just a matter of concatenating the path string returned from HOME. So if you need to write a new file to the Documents folder in the home directory of your application you can write:
char buffer; strcpy(buffer,getenv("HOME")); strcat(buffer,"/Documents/myfile.txt"); FILE *f = fopen(buffer,"w"); ... fclose(f);