Skip to content

Instantly share code, notes, and snippets.


Manuel Binna mbinna

View GitHub Profile

Effective Modern CMake

Getting Started

For a brief user-level introduction to CMake, watch C++ Weekly, Episode 78, Intro to CMake by Jason Turner. LLVM’s CMake Primer provides a good high-level introduction to the CMake syntax. Go read it now.

After that, watch Mathieu Ropert’s CppCon 2017 talk Using Modern CMake Patterns to Enforce a Good Modular Design (slides). It provides a thorough explanation of what modern CMake is and why it is so much better than “old school” CMake. The modular design ideas in this talk are based on the book [Large-Scale C++ Software Design](

View gist:db95a37a689599c3a3186f76db4c7e59
mbinna /
Last active May 31, 2017
Run Deploymate in an Xcode Run Script Build Phase
# Deploymate Command Line Interface:
if [[ -x "${DEPLOYMATE}" ]]; then
"${DEPLOYMATE}" --cli --target=XXX --forced-exit-code "${PROJECT_FILE_PATH}"
mbinna / .clang-format
Created Feb 18, 2014
Custom .clang-format
View .clang-format
# Reference:
BasedOnStyle: WebKit
AccessModifierOffset: -4
AlignEscapedNewlinesLeft: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
mbinna / isRunningTests.c
Last active Dec 18, 2015
Detect if the app was launched in the iOS Simulator to execute the unit tests. Source:
View isRunningTests.c
static BOOL isRunningTests(void) {
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
NSString *injectBundle = environment[@"XCInjectBundle"];
return [[injectBundle pathExtension] isEqualToString:@"octest"];
mbinna / gist:5316890
Created Apr 5, 2013
Stub RestKit network requests in Kiwi with Nocilla
View gist:5316890
#import "MBAEntityFetcher.h"
#import "MBAAPIBaseURL.h"
#import "MBAResponseDescriptorProvider.h"
#import <Kiwi/Kiwi.h>
#import <Nocilla/LSNocilla.h>
#import <RestKit/RestKit.h>
#import <RestKit/Testing.h>
mbinna /
Created Mar 29, 2013
Invoke appledoc in a run script build phase in Xcode
/usr/local/bin/appledoc \
--templates "/usr/local/opt/appledoc/Templates" \
--project-name "${PROJECT_NAME}" \
--project-company "Manuel Binna" \
--company-id "de.binna" \
--output "Documentation" \
--logformat xcode \
mbinna /
Last active Oct 25, 2017
Run Xcode Application Tests from the command line
# Launch application using ios-sim and set up environment to inject test bundle into application
# Source:
environment_args="--setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle=$test_bundle_path --setenv XCInjectBundleInto=$TEST_HOST"
ios-sim launch $(dirname $TEST_HOST) $environment_args --args -SenTest All $test_bundle_path
echo "Finished running tests with ios-sim"
mbinna /
Created Dec 4, 2012
Clear CocoaPods cache, re-download and re-install all pods
#!/usr/bin/env bash
rm -rf "${HOME}/Library/Caches/CocoaPods"
rm -rf "`pwd`/Pods/"
pod update
mbinna /
Last active Oct 13, 2015
Invoke mogenerator during Xcode build
# The approach used here is adopted from the following source:
# Since version 1.27, mogenerator automatically uses the current version of the data model
# Homebrew stores mogenerator in /usr/local/bin