All Projects → trojanfoe → xcodedevtools

trojanfoe / xcodedevtools

Licence: other
Xcode Development Scripts

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to xcodedevtools

docker-php
Docker build php development environment
Stars: ✭ 40 (-9.09%)
Mutual labels:  build
bulbo
🍹 Generate your static site with gulp plugins!
Stars: ✭ 14 (-68.18%)
Mutual labels:  build
ios-build-action
Build iOS project (.xcodeproj, .xcworkspace), export .ipa, optional upload to BrowserStack App Live.
Stars: ✭ 73 (+65.91%)
Mutual labels:  build
build-stats
🏆 get the build stats for pipelines 🏆
Stars: ✭ 79 (+79.55%)
Mutual labels:  build
node-less-chokidar
Watch and build CSS from LESS, compatible with Create React App
Stars: ✭ 21 (-52.27%)
Mutual labels:  build
sphinx-markdown-builder
sphinx builder that outputs markdown files.
Stars: ✭ 135 (+206.82%)
Mutual labels:  build
xcode-configure
This command can generate makefile to build xcode project in command line just like <configure & make & make install> in C/C++ language world.
Stars: ✭ 34 (-22.73%)
Mutual labels:  build
mix script
A build tool which allows you to use mix packages in an elixir script
Stars: ✭ 16 (-63.64%)
Mutual labels:  build
build-plugin-template
Template repository to create new Netlify Build plugins.
Stars: ✭ 26 (-40.91%)
Mutual labels:  build
rebuild
Zero-dependency, reproducible build environments
Stars: ✭ 48 (+9.09%)
Mutual labels:  build
elite
Fegeya Elitebuild, small, powerful build system. Written in Rust.
Stars: ✭ 24 (-45.45%)
Mutual labels:  build
Nginx-builder
A tool to build deb or rpm package of required Nginx version from the source code, with the ability to connect third-party modules. Nginx parameters are set in the yaml configuration file.
Stars: ✭ 143 (+225%)
Mutual labels:  build
open-electronics
📚 💻 Great Resources for Electronics Enthusiasts
Stars: ✭ 347 (+688.64%)
Mutual labels:  build
napalm
Support for building npm packages in Nix and lightweight npm registry [maintainer @nmattia]
Stars: ✭ 80 (+81.82%)
Mutual labels:  build
ionic4-angular8-crud-mobileapps-example
Ionic 4 Angular 8 Tutorial: Learn to Build CRUD Mobile Apps
Stars: ✭ 20 (-54.55%)
Mutual labels:  build
mopt
Babel plugin to optimize Mithril m() calls into simple JS objects for speed
Stars: ✭ 45 (+2.27%)
Mutual labels:  build
defold-deployer
Universal build && deploy script for Defold projects
Stars: ✭ 23 (-47.73%)
Mutual labels:  build
build verify
A Dart package to verify that the build is up-to-date with respect to a git repository
Stars: ✭ 28 (-36.36%)
Mutual labels:  build
get-cmake
Install and Cache latest CMake and ninja executables for your workflows on your GitHub
Stars: ✭ 52 (+18.18%)
Mutual labels:  build
gradle-android-appiconoverlay
Plugin for Android Gradle to automatically overlay the app icon with the current git commit SHA1.
Stars: ✭ 64 (+45.45%)
Mutual labels:  build

Xcode Development Tools

A small collection of scripts I have developed to make working with Xcode easier.

copy_dylibs.py

copy_dylibs.py is used to detect and copy local library dependencies into your app bundle.

A local dependency is a dynamic library that you will have built yourself or installed using a package management tool like homebrew or MacPorts. They won't exist on the end-user system and therefore your app won't run on their system if you have used them (there is also a good chance they won't run on your system either until they are copied into the app bundle and code-signed).

Any library dependency that resides outside of /System or /usr/lib is deemed a local library dependency.

The script works by examining the main executable and looking for local library dependencies and then copying them into the app bundle Frameworks folder. Any local library dependencies copied are themselves examined to see if they use any other local library dependencies, ad infinitum.

When a local library dependency is copied into the app bundle, its "install name" is adjusted in both the executable/dynamic library that references it and within the library dependency itself. The script changes the "install name" to use @rpath instead of an absolute path.

Xcode will provide all the information the script needs, via environment variables, however additional local library dependencies can be specifed on the command line. This is useful for libraries that are loaded via dlopen() and therefore cannot be detected by the script.

Configuring

In order to configure copy_dylibs.py into your Xcode project:

  • Add this repo as a submodule in a directory of your choosing, for example External, using git submodule add https://github.com/trojanfoe/xcodedevtools External/xcodedevtools.
  • Select the project settings of the App Target and in the Build Phases tab press the + top-left above Target Dependencies and select New Run Script Phase. Rename the script to Copy Dylibs.
  • In the new Run Script section put python $PROJECT_DIR/External/xcodedevtools/copy_dylibs.py in the top textbox, depending on where you added the submodule.
  • You should move Copy Dylibs so it runs after Link Binary With Libraries and before Copy Bundle Resources to avoid warning messages like changes being made to the file will invalidate the code signature in ....

Code Signing

The script will code sign all .dylib files that it copies into the app bundle.

Previously I was relying on adding --deep to the Other Code Signing Flags, however I have noticed that has no effect when running an app on an iOS device and the embedded frameworks remain unsigned. The --deep flag does work when running on the iOS Simulator or running a native macOS app, however to cover all cases I have put code signing back into the script.

bump_buildnum.py

bump_buildnum.py is used to manage build number versioning of your app bundle.

It works by maintaining a .ver file in the source tree that is incremented whenever a source file change is detected during a build. The updated build number is then written into the Info.plist file to allow for automatic versioning. Only the build version is incremented, and the main version needs to be incremented manually, based on feature updates that only you know about.

It is configured in a similar way to copy_dylibs.py.

I don't use it any longer so don't have much more to say about it, however if you find it useful let me know and I'll put more effort into documenting it.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].