Browse Source

Deploying to iOS from the Atomic Editor

Josh Engebretson 10 years ago
parent
commit
11d729466a

+ 2 - 1
.gitignore

@@ -6,4 +6,5 @@ Source/Atomic/Javascript/Modules/*
 Artifacts/*
 Docs/out/*
 Docs/node_modules/*
-Data/AtomicEditor/Deployment/Web/AtomicPlayer.js
+Data/AtomicEditor/Deployment/Web/AtomicPlayer.js
+Data/AtomicEditor/Deployment/IOS/AtomicPlayer.app/AtomicPlayer

+ 1 - 0
Data/AtomicEditor/Deployment/IOS/AtomicPlayer.app/PkgInfo

@@ -0,0 +1 @@
+APPL????

+ 31 - 5
Rakefile

@@ -100,7 +100,8 @@ namespace :macosx do
     folders = ["#{CMAKE_MACOSX_BUILD_FOLDER}", "#{MACOSX_PACKAGE_FOLDER}",
                "#{ARTIFACTS_FOLDER}/Android_Build", "#{ARTIFACTS_FOLDER}/Web_Build",  
                "#{ARTIFACTS_FOLDER}/AtomicExamples", "#{ARTIFACTS_FOLDER}/Docs",
-               "#{ARTIFACTS_FOLDER}/Examples",  "#{ARTIFACTS_FOLDER}/AtomicTiled_Build"]
+               "#{ARTIFACTS_FOLDER}/Examples",  "#{ARTIFACTS_FOLDER}/AtomicTiled_Build",
+               "#{ARTIFACTS_FOLDER}/IOSDeploy_Build"]
 
     for index in 0 ... folders.size    
 
@@ -200,6 +201,7 @@ end
 namespace :package do
 
   task :macosx_preflight => ['macosx:clean',
+                          'iosdeploy',
                           'web:player',
                           'android:player',
                           "atomictiled:osx",
@@ -267,16 +269,20 @@ namespace :package do
       sh "cp -r #{EXAMPLEINFO_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/ExampleInfo"
 
       # DEPLOY TILED
-      ATOMICTILED_DEPLOYED_DIR = "#{MAC_EDITOR_APP_FOLDER_DST}/Contents/Applications"
+      APPLICATIONS_FOLDER_DST = "#{MAC_EDITOR_APP_FOLDER_DST}/Contents/Applications"
 
-      FileUtils.mkdir_p(ATOMICTILED_DEPLOYED_DIR)
+      FileUtils.mkdir_p(APPLICATIONS_FOLDER_DST)
 
-      FileUtils.cp_r("#{ATOMICTILED_BUILD_DIR}/bin/Tiled.app", "#{ATOMICTILED_DEPLOYED_DIR}/Tiled.app")
+      FileUtils.cp_r("#{ATOMICTILED_BUILD_DIR}/bin/Tiled.app", "#{APPLICATIONS_FOLDER_DST}/Tiled.app")
 
       Dir.chdir(ATOMICTILED_DEPLOYED_DIR) do
-        sh "#{$QT_BIN_DIR}/macdeployqt #{ATOMICTILED_DEPLOYED_DIR}/Tiled.app"
+        sh "#{$QT_BIN_DIR}/macdeployqt #{APPLICATIONS_FOLDER_DST}/Tiled.app"
       end
 
+      FileUtils.mkdir_p("#{APPLICATIONS_FOLDER_DST}/CommandLine")
+
+      FileUtils.cp("#{CMAKE_IOSDEPLOY_BUILD_FOLDER}/ios-deploy", "#{APPLICATIONS_FOLDER_DST}/CommandLine/ios-deploy")
+
   end
 
   task :macosx_editor do
@@ -467,6 +473,26 @@ namespace :windows do
 
 end
 
+task :iosdeploy do
+
+  CMAKE_IOSDEPLOY_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/ios-deploy"
+
+  if Dir.exists?(CMAKE_IOSDEPLOY_BUILD_FOLDER)
+      FileUtils.rmtree(CMAKE_IOSDEPLOY_BUILD_FOLDER)          
+  end
+
+  Dir.chdir("#{$RAKE_ROOT}/Artifacts") do
+
+    sh "git clone https://github.com/AtomicGameEngine/ios-deploy"
+    
+    Dir.chdir("ios-deploy") do
+      sh "make"
+    end
+
+  end
+
+end  
+
 namespace :atomictiled do
 
   task :windows do

+ 45 - 2
Source/AtomicEditor/Source/Build/BuildIOS.cpp

@@ -17,6 +17,8 @@
 #include "BuildSystem.h"
 #include "UI/Modal/UIModalOps.h"
 
+#include "Tools/External/AEExternalTooling.h"
+
 
 
 namespace AtomicEditor
@@ -168,6 +170,15 @@ void BuildIOS::HandleEvent(StringHash eventType, VariantMap& eventData)
             {
                 RunCodeSign();
             }
+            else if (currentBuildPhase_ == CodeSign)
+            {
+                RunDeploy();
+            }
+            else if (currentBuildPhase_ == Deploy)
+            {
+                buildSystem->BuildComplete();
+            }
+
         }
         else
         {
@@ -215,7 +226,7 @@ void BuildIOS::RunCodeSign()
     Poco::Process::Env env;
     env["CODESIGN_ALLOCATE"] =  "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate";
 
-    currentBuildPhase_ = ConvertPList;
+    currentBuildPhase_ = CodeSign;
     Subprocess* subprocess = subs->Launch("/usr/bin/codesign", args, buildPath_, env);
 
     if (!subprocess)
@@ -225,14 +236,46 @@ void BuildIOS::RunCodeSign()
         return;
     }
 
+    SubscribeToEvent(subprocess, E_SUBPROCESSCOMPLETE, HANDLER(BuildIOS, HandleEvent));
+    SubscribeToEvent(subprocess, E_SUBPROCESSOUTPUT, HANDLER(BuildIOS, HandleEvent));
+
     UIModalOps* ops = GetSubsystem<UIModalOps>();
     ops->SetProgramOutputSubprocess(subprocess);
 
+}
+
+void BuildIOS::RunDeploy()
+{
+    SubprocessSystem* subs = GetSubsystem<SubprocessSystem>();
+    ExternalTooling* tooling = GetSubsystem<ExternalTooling>();
+    String iosDeploy = tooling->GetToolApplicationPath();
+    iosDeploy += "CommandLine/ios-deploy";
+
+
+    Vector<String> args;
+
+    args.Push("--uninstall");
+    args.Push("--bundle");
+    args.Push("./AtomicPlayer.app");
+
+    currentBuildPhase_ = Deploy;
+    Subprocess* subprocess = subs->Launch(iosDeploy.CString(), args, buildPath_);
+
+    if (!subprocess)
+    {
+        assert(0);
+        // ERROR
+        return;
+    }
+
     SubscribeToEvent(subprocess, E_SUBPROCESSCOMPLETE, HANDLER(BuildIOS, HandleEvent));
     SubscribeToEvent(subprocess, E_SUBPROCESSOUTPUT, HANDLER(BuildIOS, HandleEvent));
 
-}
 
+    UIModalOps* ops = GetSubsystem<UIModalOps>();
+    ops->SetProgramOutputSubprocess(subprocess);
+
+}
 
 
 void BuildIOS::Build(const String& buildPath)

+ 2 - 1
Source/AtomicEditor/Source/Build/BuildIOS.h

@@ -32,11 +32,12 @@ private:
     {
         ConvertPList,
         CodeSign,
-        Deploy,
+        Deploy
     };
 
     void RunConvertPList();
     void RunCodeSign();
+    void RunDeploy();
 
     String GenerateEntitlements();
     String GenerateInfoPlist();