about summary refs log tree commit diff
path: root/pkgs/development/mobile
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-01-17 14:19:14 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-01-17 14:19:14 +0100
commit5bb548d2e4c866ce55efdd2e1cee5e9e72863156 (patch)
tree9276447eeac077bcea3e6013ebb37f7bba642be8 /pkgs/development/mobile
parentb4dd943f1635a7e8d2e440b703fa01c6c2126164 (diff)
parent3544f3223166583f1e5459822250f1821b258c1e (diff)
downloadnixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar.gz
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar.bz2
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar.lz
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar.xz
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.tar.zst
nixlib-5bb548d2e4c866ce55efdd2e1cee5e9e72863156.zip
Merge remote-tracking branch 'origin/master' into stdenv-updates
Diffstat (limited to 'pkgs/development/mobile')
-rw-r--r--pkgs/development/mobile/titaniumenv/build-app.nix41
-rw-r--r--pkgs/development/mobile/titaniumenv/titaniumsdk.nix3
2 files changed, 39 insertions, 5 deletions
diff --git a/pkgs/development/mobile/titaniumenv/build-app.nix b/pkgs/development/mobile/titaniumenv/build-app.nix
index 0fd4929bda76..5a06e809c3d3 100644
--- a/pkgs/development/mobile/titaniumenv/build-app.nix
+++ b/pkgs/development/mobile/titaniumenv/build-app.nix
@@ -1,7 +1,7 @@
 {stdenv, androidsdk, titaniumsdk, xcodewrapper}:
 { appId, name, src, target, androidPlatformVersions ? [ "8" ]
 , release ? false, androidKeyStore ? null, androidKeyAlias ? null, androidKeyStorePassword ? null
-, iosKeyFile ? null, iosCertificateName ? null, iosCertificate ? null, iosCertificatePassword ? null
+, iosKeyFile ? null, iosCertificateName ? null, iosCertificate ? null, iosCertificatePassword ? null, iosDistribute ? false
 }:
 
 assert (release && target == "android") -> androidKeyStore != null && androidKeyAlias != null && androidKeyStorePassword != null;
@@ -12,6 +12,8 @@ let
     platformVersions = androidPlatformVersions;
     useGoogleAPIs = true;
   };
+  
+  deleteKeychain = "security delete-keychain $keychainName";
 in
 stdenv.mkDerivation {
   inherit name src;
@@ -30,8 +32,7 @@ stdenv.mkDerivation {
           "${titaniumsdk}/mobilesdk/*/*/android/builder.py build ${name} ${androidsdkComposition}/libexec/android-sdk-* $(pwd) ${appId}"
 
       else if target == "iphone" then
-        if release then
-          ''
+        if iosDistribute then ''
             export HOME=/Users/$(whoami)
             export keychainName=$(basename $out)
             
@@ -51,11 +52,39 @@ stdenv.mkDerivation {
                 cp ${iosKeyFile} "$HOME/Library/MobileDevice/Provisioning Profiles/$provisioningId.mobileprovision"
             fi
             
-            ${titaniumsdk}/mobilesdk/*/*/iphone/builder.py adhoc 6.0 $(pwd) ${appId} ${name} "$provisioningId" "${iosCertificateName}" universal "$HOME/Library/Keychains/$keychainName"
+            ${titaniumsdk}/mobilesdk/*/*/iphone/builder.py distribute 6.0 $(pwd) ${appId} ${name} "$provisioningId" "${iosCertificateName}" $out universal "$HOME/Library/Keychains/$keychainName"
             
             # Remove our generated keychain
             
-            security delete-keychain $keychainName
+            ${deleteKeychain}
+          ''
+        else
+            if release then
+              ''
+                export HOME=/Users/$(whoami)
+                export keychainName=$(basename $out)
+            
+                # Create a keychain with the component hash name (should always be unique)
+                security create-keychain -p "" $keychainName
+                security default-keychain -s $keychainName
+                security unlock-keychain -p "" $keychainName
+                security import ${iosCertificate} -k $keychainName -P "${iosCertificatePassword}" -A
+
+                provisioningId=$(grep UUID -A1 -a ${iosKeyFile} | grep -o "[-A-Z0-9]\{36\}")
+   
+                # Ensure that the requested provisioning profile can be found
+            
+                if [ ! -f "$HOME/Library/MobileDevice/Provisioning Profiles" ]
+                then
+                    mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles"
+                    cp ${iosKeyFile} "$HOME/Library/MobileDevice/Provisioning Profiles/$provisioningId.mobileprovision"
+                fi
+            
+                ${titaniumsdk}/mobilesdk/*/*/iphone/builder.py adhoc 6.0 $(pwd) ${appId} ${name} "$provisioningId" "${iosCertificateName}" universal "$HOME/Library/Keychains/$keychainName"
+            
+                # Remove our generated keychain
+            
+                ${deleteKeychain}
           ''
         else
           ''
@@ -84,4 +113,6 @@ stdenv.mkDerivation {
         else if target == "iphone" then ""
         else throw "Target: ${target} is not supported!"}
   '';
+  
+  failureHook = stdenv.lib.optionalString (release && target == "iphone") deleteKeychain;
 }
diff --git a/pkgs/development/mobile/titaniumenv/titaniumsdk.nix b/pkgs/development/mobile/titaniumenv/titaniumsdk.nix
index 5e1943b1bdc0..d3831a9c2bea 100644
--- a/pkgs/development/mobile/titaniumenv/titaniumsdk.nix
+++ b/pkgs/development/mobile/titaniumenv/titaniumsdk.nix
@@ -53,5 +53,8 @@ stdenv.mkDerivation {
       --prefix PYTHONPATH : ${python.modules.sqlite3}/lib/python*/site-packages \
       --prefix PATH : ${jdk}/bin \
       --prefix JAVA_HOME : ${jdk}
+  '' + stdenv.lib.optionalString (stdenv.system == "x86_64-darwin") ''
+    # 'ditto' utility is needed to copy stuff to the Xcode organizer. Dirty, but this allows it to work.
+    sed -i -e "s|ditto|/usr/bin/ditto|g" $out/mobilesdk/osx/*/iphone/builder.py
   '';
 }