Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/osfunapps/os-xcode-tools-py
a bunch of tools for python xcode project development
https://github.com/osfunapps/os-xcode-tools-py
apple automation ios project swift xcode
Last synced: 27 days ago
JSON representation
a bunch of tools for python xcode project development
- Host: GitHub
- URL: https://github.com/osfunapps/os-xcode-tools-py
- Owner: osfunapps
- License: mit
- Created: 2019-06-20T14:11:02.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-02-07T14:21:28.000Z (almost 4 years ago)
- Last Synced: 2024-11-19T16:59:08.394Z (about 1 month ago)
- Topics: apple, automation, ios, project, swift, xcode
- Language: Python
- Homepage:
- Size: 12.7 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
Introduction
------------This module aim is to change properties of an xcode project (add files, directories, change plist files etc...)
## Installation
Install via pip:pip install os-xcode-tools
## Usage
Require XcodeProjectManipulator or PListFileHandler
```python
import os_xcode_tools.xcode_project_manipulator as xm
import os_xcode_tools.pl_list_file_handler as ph
```## Functions and signatures:
# XcodeProjectManipulator
```python
def build_project(xcodeproj_path, pbxproj_path='project.pbxproj'):
"""
call this initially. Will create the project object to work with.Args:
xcodeproj_path -> the path to your xcodeproj file
pbxproj_path -> the path to your pbxproj file (usually just project.pbxproj)
"""
return XcodeProject.load(xcodeproj_path + '/' + pbxproj_path)# will create a group. if already exists, return it
def get_or_create_group(project, path_to_group):
path = os.path.normpath(path_to_group)
splatted_path = path.split(os.sep)
last_group = None
for i in splatted_path:
last_group = project.get_or_create_group(i, parent=last_group)# last_group = project.get_or_create_group(i)
return last_group
# parent = project.get_or_create_group(parent_name)
# return project.get_or_create_group(group_name, parent=parent)# will add the references of a file into a group
# force = replace if exists
def add_file_to_group(project, file_path, group_obj, force=True):
project.add_file(file_path, force=force, parent=group_obj)# will add the references of files into a group
# force = replace if exists
def add_arr_of_files_to_group(project, arr_of_files, group_obj, force=True):
for file_path in arr_of_files:
add_file_to_group(project, file_path, group_obj, force)# remove a whole group
def remove_group(project, group_name):
return project.remove_group_by_name(group_name)def remove_file_from_group(project, group, file_name):
for f in group.children:
if f._get_comment() == file_name:
project.remove_file_by_id(f)# will remove all of the references of files from a given group
def clear_all_files_from_group(project, group_obj):
while True:
if len(group_obj.children) == 0:
project.save()
return
for file in group_obj.children:
project.remove_file_by_id(file)# will add the ability to inject these array of extensions (add .zip, .xml etc...)
def add_files_extensions_arr(extensions_arr):
for ext in extensions_arr:
ProjectFiles._FILE_TYPES[ext] = (ext[1:] + ext, u'PBXResourcesBuildPhase')# will change the bundle id
def change_bundle_identifier(project, new_bundle_id):
set_custom_flag(project, 'PRODUCT_BUNDLE_IDENTIFIER', new_bundle_id)# will set a custom flag to the project
def set_custom_flag(project, key, val):
project.set_flags(key, val)# will replace the info.plist file of the project.
# do this if you want to change the display name of the current project, for example.
def replace_info_plist_file(old_info_file, new_info_file):
fh.copy_file(new_info_file, old_info_file)# save the changes in the project, otherwise your changes won't be picked up by Xcode
def save_changes(project):
project.save()
```
And more...## Links
[GitHub - osapps](https://github.com/osfunapps)## Licence
ISC