-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodule-template.sh
executable file
·124 lines (90 loc) · 4.09 KB
/
module-template.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/bin/bash
prefix=$1
module=$2
uppercase=$(echo $(echo ${module:0:1} | tr '[:lower:]' '[:upper:]')$(echo ${module:1}))
lowercase=$(echo $(echo ${module:0:1} | tr '[:upper:]' '[:lower:]')$(echo ${module:1}))
mkdir ${uppercase}
cd ${uppercase}
cat <<EOF > ${prefix}${uppercase}VM.swift
import UIKit
class ${prefix}${uppercase}VM: NSObject {
weak var delegate: ${prefix}${uppercase}VMDelegate?
private weak var userInterface: ${prefix}${uppercase}ViewController?
private let dataManager: ${prefix}${uppercase}DataManager
// Initialization
init(userInterface: ${prefix}${uppercase}ViewController, dataManager: ${prefix}${uppercase}DataManager) {
self.userInterface = userInterface
self.dataManager = dataManager
}
}
@objc protocol ${prefix}${uppercase}VMDelegate {
}
EOF
cat <<EOF > ${prefix}${uppercase}DataManager.swift
import UIKit
class ${prefix}${uppercase}DataManager: NSObject {
}
EOF
cat <<EOF > ${prefix}${uppercase}Wireframe.swift
import UIKit
class ${prefix}${uppercase}Wireframe: NSObject, ${prefix}${uppercase}VMDelegate {
private let ${lowercase}ViewController = ${prefix}${uppercase}ViewController(nibName: "${prefix}${uppercase}ViewController", bundle: nil)
private let applicationWireframe: ${prefix}ApplicationWireframe
private var baseViewController: UIViewController?
// Initialization
func viewController() -> UIViewController {
return ${lowercase}ViewController
}
init(applicationWireframe: ${prefix}ApplicationWireframe) {
self.applicationWireframe = applicationWireframe
super.init()
var dataManager = ${prefix}${uppercase}DataManager()
var vm = ${prefix}${uppercase}VM(userInterface: ${lowercase}ViewController, dataManager: dataManager)
vm.delegate = self
${lowercase}ViewController.eventHandler = vm
}
// Public methods
func routeOntoBaseViewController(baseViewController: UIViewController,
animated: Bool, completion: (()->())?) {
if baseViewController.presentedViewController != nil {
return
}
self.baseViewController = baseViewController
self.baseViewController!.presentViewController(${lowercase}ViewController,
animated: animated, completion: completion)
}
func dismiss(#animated: Bool, completion: (()->())?) {
baseViewController?.dismissViewControllerAnimated(animated,
completion: completion)
}
}
EOF
cat <<EOF > ${prefix}${uppercase}ViewController.swift
import UIKit
class ${prefix}${uppercase}ViewController: UIViewController {
var eventHandler: ${prefix}${uppercase}VM?
}
EOF
cat <<EOF > ${prefix}${uppercase}ViewController.xib
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6154.21" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6153.13"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="${prefix}${uppercase}ViewController" customModule="OkAlright" customModuleProvider="target">
<connections>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/>
</view>
</objects>
</document>
EOF