Merge: doc: fixed some typos and other misc. corrections
[nit.git] / src / platform / xcode_templates.nit
index aa6cc5b..62768a2 100644 (file)
@@ -85,6 +85,9 @@ class PbxFile
        # Path to `self`
        var path: String
 
+       # Compiler flags for this source file
+       var cflags: String = "" is writable
+
        # UUID for build elements
        private var build_uuid: String = sys.pbx_uuid_generator.next_uuid is lazy
 
@@ -104,15 +107,22 @@ class PbxFile
        end
 
        # PBX description of this file
-       private fun description: Writable do return """
+       private fun description: Writable
+       do
+               var extra = ""
+               var cflags = cflags
+               if not cflags.is_empty then extra = "\nsettings = \{COMPILER_FLAGS = \"{cflags}\"; \};"
+
+               return """
                {{{ref_uuid}}} /* {{{doc}}} */ = {
                        isa = PBXFileReference;
                        fileEncoding = 4;
                        lastKnownFileType = {{{file_type}}};
-                       path = {{{path}}};
-                       sourceTree = "<group>";
+                       path = '{{{path}}}';
+                       sourceTree = "<group>";{{{extra}}}
                        };
 """
+       end
 
        private fun add_to_project(project: PbxprojectTemplate)
        do
@@ -139,6 +149,9 @@ class PbxprojectTemplate
        # Name of the project
        var name: String
 
+       # OTHER_CFLAGS
+       var cflags = "" is writable
+
        # All body/implementation source files to be compiled
        private var source_files = new Array[PbxFile]
 
@@ -174,18 +187,10 @@ class PbxprojectTemplate
 """
 
                add """
+               0F4688411FDF8748004F34D4 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 0F4688401FDF8748004F34D4 /* assets */; };
+               0FDD07A21C6F8E0E006FF70E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0FDD07A11C6F8E0E006FF70E /* LaunchScreen.storyboard */; };
 /* End PBXBuildFile section */
 
-/* Begin PBXContainerItemProxy section */
-               AF9F83EA1A5F0D21004B62C0 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = AF9F83C41A5F0D21004B62C0 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF9F83CB1A5F0D21004B62C0;
-                       remoteInfo = {{{name}}};
-               };
-/* End PBXContainerItemProxy section */
-
 /* Begin PBXFileReference section */
        /* Static generated files */
                AF9F83CC1A5F0D21004B62C0 /* {{{name}}}.app */ = {
@@ -228,6 +233,8 @@ class PbxprojectTemplate
                for file in files do add file.description
 
                add """
+               0F4688401FDF8748004F34D4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = {{{name}}}/assets; sourceTree = SOURCE_ROOT; };
+               0FDD07A11C6F8E0E006FF70E /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -246,6 +253,7 @@ class PbxprojectTemplate
                        children = (
                                AF9F83CE1A5F0D21004B62C0 /* {{{name}}} */,
                                AF9F83CD1A5F0D21004B62C0 /* Products */,
+                               0FDD07A11C6F8E0E006FF70E /* LaunchScreen.storyboard */,
                        );
                        sourceTree = "<group>";
                };
@@ -260,6 +268,7 @@ class PbxprojectTemplate
                AF9F83CE1A5F0D21004B62C0 /* {{{name}}} */ = {
                        isa = PBXGroup;
                        children = (
+                               0F4688401FDF8748004F34D4 /* assets */,
 """
                        # Reference all known files
                        for file in files do add """
@@ -271,15 +280,6 @@ class PbxprojectTemplate
                        path = {{{name}}};
                        sourceTree = "<group>";
                };
-               AF9F83CF1A5F0D21004B62C0 /* Supporting Files */ = {
-                       isa = PBXGroup;
-                       children = (
-                               AF9F83D01A5F0D21004B62C0 /* Info.plist */,
-                               AF9F83D11A5F0D21004B62C0 /* main.m */,
-                       );
-                       name = "Supporting Files";
-                       sourceTree = "<group>";
-               };
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -343,6 +343,8 @@ class PbxprojectTemplate
 """
 
                add """
+                               0FDD07A21C6F8E0E006FF70E /* LaunchScreen.storyboard in Resources */,
+                               0F4688411FDF8748004F34D4 /* assets in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
@@ -364,25 +366,6 @@ class PbxprojectTemplate
                };
 /* End PBXSourcesBuildPhase section */
 
-/* Begin PBXVariantGroup section */
-               AF9F83DD1A5F0D21004B62C0 /* Main.storyboard */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               AF9F83DE1A5F0D21004B62C0 /* Base */,
-                       );
-                       name = Main.storyboard;
-                       sourceTree = "<group>";
-               };
-               AF9F83E21A5F0D21004B62C0 /* LaunchScreen.xib */ = {
-                       isa = PBXVariantGroup;
-                       children = (
-                               AF9F83E31A5F0D21004B62C0 /* Base */,
-                       );
-                       name = LaunchScreen.xib;
-                       sourceTree = "<group>";
-               };
-/* End PBXVariantGroup section */
-
 /* Begin XCBuildConfiguration section */
                AF9F83F11A5F0D21004B62C0 /* Debug */ = {
                        isa = XCBuildConfiguration;
@@ -448,6 +431,7 @@ class PbxprojectTemplate
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                                INFOPLIST_FILE = {{{name}}}/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+                               OTHER_CFLAGS = "{{{cflags.escape_to_c}}}";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                        };
                        name = Debug;
@@ -458,6 +442,7 @@ class PbxprojectTemplate
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                                INFOPLIST_FILE = {{{name}}}/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+                               OTHER_CFLAGS = "{{{cflags.escape_to_c}}}";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                        };
                        name = Release;
@@ -528,7 +513,7 @@ class PlistTemplate
        <key>CFBundleShortVersionString</key>
        <string>{{{short_version}}}</string>
        <key>CFBundleSignature</key>
-       <string>\\?\\?\\?\\?</string>
+       <string>????</string>
        <key>CFBundleVersion</key>
        <string>{{{bundle_version}}}</string>
        <key>LSRequiresIPhoneOS</key>
@@ -550,8 +535,85 @@ class PlistTemplate
                <string>UIInterfaceOrientationLandscapeLeft</string>
                <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
+
+       <key>UILaunchStoryboardName</key>
+       <string>LaunchScreen</string>
+
+       <key>NSAppTransportSecurity</key>
+       <dict>
+               <key>NSAllowsArbitraryLoads</key><true/>
+       </dict>
 </dict>
 </plist>
 """
        end
 end
+
+# Template for the loading screen to generate `LaunchScreen.storyboard`
+class LaunchScreenStoryboardTemplate
+       super Template
+
+       # Large text to show in the center of the loading screen
+       var title = "" is writable
+
+       # Text to show at the bottom of the loading screen
+       var subtitle = "" is writable
+
+       # TODO make this more customizable by moving the subviews block as an attribute
+       # or by allowing to pass a custom file from the ` res/` folder.
+
+       redef fun rendering
+       do
+               add """
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="{{{subtitle}}}" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
+                                <rect key="frame" x="20" y="559" width="560" height="21"/>
+                                <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="{{{title}}}" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
+                                <rect key="frame" x="20" y="176" width="560" height="43"/>
+                                <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+                                <color key="textColor" red="0.0" green="0.5" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
+                            <constraint firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
+                            <constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" constant="20" symbolic="YES" id="SfN-ll-jLj"/>
+                            <constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
+                            <constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
+                            <constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" constant="20" symbolic="YES" id="x7j-FC-K8j"/>
+                        </constraints>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>"""
+       end
+end