- Added xcodeenv: experimental support to build iOS apps through Nix
- Moved mobile development tools into a separate folder
This commit is contained in:
parent
a547de1ecb
commit
5b0ca88d97
@ -1,7 +1,7 @@
|
|||||||
{ stdenv, fetchurl, apr, expat
|
{ stdenv, fetchurl, apr, expat
|
||||||
, sslSupport ? true, openssl
|
, sslSupport ? true, openssl
|
||||||
, bdbSupport ? false, db4
|
, bdbSupport ? false, db4
|
||||||
, ldapSupport ? true, openldap
|
, ldapSupport ? false, openldap
|
||||||
}:
|
}:
|
||||||
|
|
||||||
assert sslSupport -> openssl != null;
|
assert sslSupport -> openssl != null;
|
||||||
|
@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
configurePhase = ''
|
configurePhase = ''
|
||||||
|
${stdenv.lib.optionalString (stdenv.system == "x86_64-darwin") "export PATH=/usr/bin:$PATH"}
|
||||||
mkdir build/gyp
|
mkdir build/gyp
|
||||||
ln -sv ${gyp}/bin/gyp build/gyp/gyp
|
ln -sv ${gyp}/bin/gyp build/gyp/gyp
|
||||||
'';
|
'';
|
||||||
@ -37,7 +38,11 @@ stdenv.mkDerivation rec {
|
|||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
mkdir -p $out/lib
|
mkdir -p $out/lib
|
||||||
mv -v out/${arch}.release/d8 $out/bin
|
mv -v out/${arch}.release/d8 $out/bin
|
||||||
mv -v out/${arch}.release/lib.target/libv8.so $out/lib
|
|
||||||
|
${if stdenv.system == "x86_64-darwin" then
|
||||||
|
"mv -v out/${arch}.release/libv8.dylib $out/lib"
|
||||||
|
else
|
||||||
|
"mv -v out/${arch}.release/lib.target/libv8.so $out/lib"}
|
||||||
mv -v include $out/
|
mv -v include $out/
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
92
pkgs/development/mobile/xcodeenv/build-app.nix
Normal file
92
pkgs/development/mobile/xcodeenv/build-app.nix
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{stdenv, xcodewrapper}:
|
||||||
|
{ name
|
||||||
|
, src
|
||||||
|
, target ? null
|
||||||
|
, configuration ? null
|
||||||
|
, scheme ? null
|
||||||
|
, sdk ? null
|
||||||
|
, arch ? null
|
||||||
|
, xcodeFlags ? ""
|
||||||
|
, release ? false
|
||||||
|
, codeSignIdentity ? null
|
||||||
|
, certificateFile ? null
|
||||||
|
, certificatePassword ? null
|
||||||
|
, provisioningProfile ? null
|
||||||
|
, generateIPA ? false
|
||||||
|
, generateXCArchive ? false
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert release -> codeSignIdentity != null && certificateFile != null && certificatePassword != null && provisioningProfile != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
# Set some default values here
|
||||||
|
|
||||||
|
_target = if target == null then name else target;
|
||||||
|
_scheme = if scheme == null then name else scheme;
|
||||||
|
|
||||||
|
_configuration = if configuration == null
|
||||||
|
then
|
||||||
|
if release then "Release" else "Debug"
|
||||||
|
else configuration;
|
||||||
|
|
||||||
|
_arch = if arch == null
|
||||||
|
then
|
||||||
|
if release then "armv7" else "i386"
|
||||||
|
else arch;
|
||||||
|
|
||||||
|
_sdk = if sdk == null
|
||||||
|
then
|
||||||
|
if release then "iphoneos6.0" else "iphonesimulator6.0"
|
||||||
|
else sdk;
|
||||||
|
|
||||||
|
# The following is to prevent repetition
|
||||||
|
deleteKeychain = "security delete-keychain $keychainName";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit name src;
|
||||||
|
buildInputs = [ xcodewrapper ];
|
||||||
|
buildPhase = ''
|
||||||
|
${stdenv.lib.optionalString release ''
|
||||||
|
export HOME=/Users/$(whoami)
|
||||||
|
keychainName="$(basename $out)"
|
||||||
|
|
||||||
|
# Create a keychain
|
||||||
|
security create-keychain -p "" $keychainName
|
||||||
|
security default-keychain -s $keychainName
|
||||||
|
security unlock-keychain -p "" $keychainName
|
||||||
|
|
||||||
|
# Import the certificate into the keychain
|
||||||
|
security import ${certificateFile} -k $keychainName -P "${certificatePassword}" -A
|
||||||
|
|
||||||
|
# Determine provisioning ID
|
||||||
|
PROVISIONING_PROFILE=$(grep UUID -A1 -a ${provisioningProfile} | grep -o "[-A-Z0-9]\{36\}")
|
||||||
|
|
||||||
|
if [ ! -f "$HOME/Library/MobileDevice/Provisioning Profiles/$PROVISIONING_PROFILE.mobileprovision" ]
|
||||||
|
then
|
||||||
|
# Copy provisioning profile into the home directory
|
||||||
|
mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles"
|
||||||
|
cp ${provisioningProfile} "$HOME/Library/MobileDevice/Provisioning Profiles/$PROVISIONING_PROFILE.mobileprovision"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check whether the identity can be found
|
||||||
|
security find-identity -p codesigning $keychainName
|
||||||
|
''}
|
||||||
|
|
||||||
|
# Do the building
|
||||||
|
xcodebuild -target ${_target} -configuration ${_configuration} -scheme ${_scheme} -sdk ${_sdk} -arch ${_arch} ONLY_ACTIVE_ARCH=NO CONFIGURATION_TEMP_DIR=$TMPDIR CONFIGURATION_BUILD_DIR=$out ${if generateXCArchive then "archive" else ""} ${xcodeFlags} ${if release then ''"CODE_SIGN_IDENTITY=${codeSignIdentity}" PROVISIONING_PROFILE=$PROVISIONING_PROFILE OTHER_CODE_SIGN_FLAGS="--keychain $HOME/Library/Keychains/$keychainName"'' else ""}
|
||||||
|
|
||||||
|
${stdenv.lib.optionalString release ''
|
||||||
|
${stdenv.lib.optionalString generateIPA ''
|
||||||
|
# Produce an IPA file
|
||||||
|
xcrun -sdk iphoneos PackageApplication -v $out/*.app -o $out/${name}.ipa
|
||||||
|
''}
|
||||||
|
|
||||||
|
# Delete our temp keychain
|
||||||
|
${deleteKeychain}
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
failureHook = stdenv.lib.optionalString release deleteKeychain;
|
||||||
|
|
||||||
|
installPhase = "true";
|
||||||
|
}
|
15
pkgs/development/mobile/xcodeenv/default.nix
Normal file
15
pkgs/development/mobile/xcodeenv/default.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{stdenv}:
|
||||||
|
|
||||||
|
rec {
|
||||||
|
xcodewrapper = import ./xcodewrapper.nix {
|
||||||
|
inherit stdenv;
|
||||||
|
};
|
||||||
|
|
||||||
|
buildApp = import ./build-app.nix {
|
||||||
|
inherit stdenv xcodewrapper;
|
||||||
|
};
|
||||||
|
|
||||||
|
simulateApp = import ./simulate-app.nix {
|
||||||
|
inherit stdenv xcodewrapper;
|
||||||
|
};
|
||||||
|
}
|
17
pkgs/development/mobile/xcodeenv/simulate-app.nix
Normal file
17
pkgs/development/mobile/xcodeenv/simulate-app.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{stdenv, xcodewrapper}:
|
||||||
|
{name, app, device ? "iPhone", baseDir ? ""}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit name;
|
||||||
|
buildCommand = ''
|
||||||
|
ensureDir $out/bin
|
||||||
|
cat > $out/bin/run-test-simulator << "EOF"
|
||||||
|
#! ${stdenv.shell} -e
|
||||||
|
|
||||||
|
cd ${app}/${baseDir}/${name}.app
|
||||||
|
"$(readlink "${xcodewrapper}/bin/iPhone Simulator")" -SimulateApplication ./${name} -SimulateDevice '${device}'
|
||||||
|
EOF
|
||||||
|
chmod +x $out/bin/run-test-simulator
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
24
pkgs/development/mobile/xcodeenv/xcodewrapper.nix
Normal file
24
pkgs/development/mobile/xcodeenv/xcodewrapper.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{stdenv}:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "4.5.2";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "xcode-wrapper-"+version;
|
||||||
|
buildCommand = ''
|
||||||
|
ensureDir $out/bin
|
||||||
|
cd $out/bin
|
||||||
|
ln -s /usr/bin/xcode-select
|
||||||
|
ln -s /usr/bin/xcodebuild
|
||||||
|
ln -s /usr/bin/xcrun
|
||||||
|
ln -s /usr/bin/security
|
||||||
|
ln -s "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator"
|
||||||
|
|
||||||
|
# Check if we have the xcodebuild version that we want
|
||||||
|
if [ -z "$($out/bin/xcodebuild -version | grep ${version})" ]
|
||||||
|
then
|
||||||
|
echo "We require xcodebuild version: ${version}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
}
|
@ -12,20 +12,23 @@ stdenv.mkDerivation rec {
|
|||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--openssl-includes=${openssl}/include"
|
"--openssl-includes=${openssl}/include"
|
||||||
"--openssl-libpath=${openssl}/lib"
|
"--openssl-libpath=${openssl}/lib"
|
||||||
"--shared-v8"
|
#"--shared-v8"
|
||||||
"--shared-v8-includes=${v8}/includes"
|
#"--shared-v8-includes=${v8}/includes"
|
||||||
"--shared-v8-libpath=${v8}/lib"
|
#"--shared-v8-libpath=${v8}/lib"
|
||||||
];
|
];
|
||||||
|
|
||||||
patches = stdenv.lib.optional stdenv.isDarwin ./no-arch-flag.patch;
|
#patches = stdenv.lib.optional stdenv.isDarwin ./no-arch-flag.patch;
|
||||||
|
|
||||||
prePatch = ''
|
prePatch = ''
|
||||||
sed -e 's|^#!/usr/bin/env python$|#!${python}/bin/python|g' -i tools/{*.py,waf-light,node-waf} configure
|
sed=$(type -p sed)
|
||||||
|
export PATH=/usr/bin:$PATH
|
||||||
|
|
||||||
|
$sed -e 's|^#!/usr/bin/env python$|#!${python}/bin/python|g' -i tools/{*.py,waf-light,node-waf} configure
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
|
|
||||||
sed -e 's|^#!/usr/bin/env node$|#!'$out'/bin/node|' -i $out/lib/node_modules/npm/bin/npm-cli.js
|
$sed -e 's|^#!/usr/bin/env node$|#!'$out'/bin/node|' -i $out/lib/node_modules/npm/bin/npm-cli.js
|
||||||
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
||||||
install_name_tool -change libv8.dylib ${v8}/lib/libv8.dylib $out/bin/node
|
install_name_tool -change libv8.dylib ${v8}/lib/libv8.dylib $out/bin/node
|
||||||
'';
|
'';
|
||||||
|
@ -411,10 +411,12 @@ let
|
|||||||
client = true;
|
client = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
androidenv = import ../development/androidenv {
|
androidenv = import ../development/mobile/androidenv {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
pkgs_i686 = pkgsi686Linux;
|
pkgs_i686 = pkgsi686Linux;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
xcodeenv = callPackage ../development/mobile/xcodeenv { };
|
||||||
|
|
||||||
inherit (androidenv) androidsdk_4_1;
|
inherit (androidenv) androidsdk_4_1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user