Hello!
I think it would be helpful to check for any existing environment variables for the "Run" scheme.
Each time I include a new package into my project and run swift package generate-xcodeproj I have to manually go in and add my env vars again.
The exact command I run is actually:
swift package -Xlinker -L/usr/local/lib generate-xcodeproj
This is so I can use MySQL, and I have my database connection details in env vars.
Thanks for reading. I look forward to hearing back!
Jared Anderton
1 Like
Yes, this sucks, but as a workaround you can write scripts that call swift package generate-xcodeproj and then run some other code that sets the environment variables, e.g. with Python
import xml.etree.ElementTree as ETree
file = "MyProject.xcodeproj/xcshareddata/xcschemes/MyTarget.xcscheme"
tree = ETree.parse(file)
env_var_section = ETree.SubElement(tree.getroot().find("LaunchAction"), "EnvironmentVariables")
my_env_var_setting_1 = ETree.SubElement(env_var_section, "EnvironmentVariable")
my_env_var_setting_1.attrib["key"] = "MY_ENV_VAR_1"
my_env_var_setting_1.attrib["value"] = "true"
my_env_var_setting_1.attrib["isEnabled"] = "YES"
my_env_var_setting_2 = ETree.SubElement(env_var_section, "EnvironmentVariable")
my_env_var_setting_2.attrib["key"] = "MY_ENV_VAR_2"
my_env_var_setting_2.attrib["value"] = "500"
my_env_var_setting_2.attrib["isEnabled"] = "YES"
tree.write(file)
Alternatively, you might instead store your configuration in files (those don't need to be committed, if they contain sensitive data), and use something like Configuration or DotEnv. This is probably a cleaner long-term solution (though I agree that it would be nice if the script didn't overwrite existing environment variables...).
1 Like
Hi Jared,
I ran into the same issue a few months ago, some good alternative workaround suggestions can be found on this thread: