Rename Gluon to Tokamak (#44)
* Rename Gluon to Tokamak * Fix scheme in .travis.yml, fix storyboard
This commit is contained in:
parent
22cce69d3a
commit
c197701e36
|
@ -18,10 +18,10 @@ before_install:
|
|||
script:
|
||||
- swiftformat --lint --verbose .
|
||||
- swiftlint
|
||||
- xcodebuild -scheme GluonUIKit -sdk iphonesimulator
|
||||
- xcodebuild test -enableCodeCoverage YES -scheme GluonCore
|
||||
- xcodebuild -scheme TokamakUIKit -sdk iphonesimulator
|
||||
- xcodebuild test -enableCodeCoverage YES -scheme Tokamak
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
# - swift build
|
||||
# - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/Gluon.xcworkspace -scheme Gluon-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
|
||||
# - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/Tokamak.xcworkspace -scheme Tokamak-Example -sdk iphonesimulator11.0 ONLY_ACTIVE_ARCH=NO | xcpretty
|
||||
# - pod lib lint
|
||||
|
|
|
@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at conduct@gluon.sh. All
|
||||
reported by contacting the project team at conduct@tokamakui.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
platform :ios, '11.0'
|
||||
|
||||
target 'Gluon_Example' do
|
||||
pod 'Gluon', :path => '..'
|
||||
pod 'GluonUIKit', :path => '..'
|
||||
target 'TokamakDemo' do
|
||||
pod 'Tokamak', :path => '..'
|
||||
pod 'TokamakUIKit', :path => '..'
|
||||
end
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
PODS:
|
||||
- Gluon (0.1.0)
|
||||
- GluonUIKit (0.1.0):
|
||||
- Gluon (~> 0.1)
|
||||
- Tokamak (0.1.0)
|
||||
- TokamakUIKit (0.1.0):
|
||||
- Tokamak (~> 0.1)
|
||||
|
||||
DEPENDENCIES:
|
||||
- Gluon (from `..`)
|
||||
- GluonUIKit (from `..`)
|
||||
- Tokamak (from `..`)
|
||||
- TokamakUIKit (from `..`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
Gluon:
|
||||
Tokamak:
|
||||
:path: ".."
|
||||
GluonUIKit:
|
||||
TokamakUIKit:
|
||||
:path: ".."
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Gluon: 5eb3a35b870287095b92a4203dbf9b6fa423ce02
|
||||
GluonUIKit: d88bc67ed0cc1dcaf89bad30413c9de91a65c629
|
||||
Tokamak: 502731565af11af88173b92a55799e6811240c55
|
||||
TokamakUIKit: 1ba14d4ee2b26eaa5c5e2e416af61b48e02c58eb
|
||||
|
||||
PODFILE CHECKSUM: 72db4a70e433e8e9a04a2f588b37abc06f0bfe35
|
||||
PODFILE CHECKSUM: fde6d1f4790dafaa632305df0301b976838f0849
|
||||
|
||||
COCOAPODS: 1.6.0
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
//
|
||||
// GluonTest.swift
|
||||
// Gluon_Tests
|
||||
// TokamakTest.swift
|
||||
// Tokamak_Tests
|
||||
//
|
||||
// Created by Max Desiatov on 27/11/2018.
|
||||
// Copyright © 2018 CocoaPods. All rights reserved.
|
||||
// Copyright © 2018 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
class GluonTest: XCTestCase {
|
||||
class TokamakTest: XCTestCase {
|
||||
override func setUp() {
|
||||
// Put setup code here. This method is called before the invocation of each
|
||||
// test method in the class.
|
|
@ -3,22 +3,21 @@
|
|||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objectVersion = 51;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
22E3415861D32D3493271FF2 /* libPods-Gluon_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */; };
|
||||
607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; };
|
||||
607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; };
|
||||
607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; };
|
||||
607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
|
||||
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
|
||||
C449B806DFEE55B6CEE6478C /* libPods-TokamakDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */; };
|
||||
D11DB6432219C03000013FC3 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D11DB6422219C03000013FC3 /* Timer.swift */; };
|
||||
D1BFAF772215795900845EA0 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF762215795900845EA0 /* Router.swift */; };
|
||||
D1BFAF792215800A00845EA0 /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF782215800A00845EA0 /* Counter.swift */; };
|
||||
D1BFAF7B22158B4000845EA0 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF7A22158B4000845EA0 /* List.swift */; };
|
||||
D1DEEC2922009E8000C525EE /* ModalRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1DEEC2822009E8000C525EE /* ModalRouter.swift */; };
|
||||
D1E6BCD221AD4CD6002769E3 /* GluonTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */; };
|
||||
D1F2C3272214407B008358DC /* TableModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F2C3262214407B008358DC /* TableModal.swift */; };
|
||||
D1F7185322159E09004E5951 /* Controls.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F7185222159E09004E5951 /* Controls.swift */; };
|
||||
D1F7185522159EAD004E5951 /* DatePickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F7185422159EAD004E5951 /* DatePickers.swift */; };
|
||||
|
@ -27,45 +26,32 @@
|
|||
D1F718612215A617004E5951 /* Modals.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F718602215A617004E5951 /* Modals.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 607FACCF1AFB9204008FA782;
|
||||
remoteInfo = Gluon;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Gluon_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Gluon_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Gluon_Example/Pods-Gluon_Example.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
4C92866C2AA17B00C980C452 /* Gluon.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Gluon.podspec; path = ../Gluon.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
|
||||
607FACD01AFB9204008FA782 /* Gluon_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gluon_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TokamakDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TokamakDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-TokamakDemo/Pods-TokamakDemo.release.xcconfig"; sourceTree = "<group>"; };
|
||||
607FACD01AFB9204008FA782 /* TokamakDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TokamakDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||
607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||
607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gluon_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
8CADEBB8BFF6F2621CA49E8F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
|
||||
C1B4A8D80770145FDAFEAE64 /* Pods_Gluon_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Gluon_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TokamakDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TokamakDemo/Pods-TokamakDemo.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
C6DA99382B6892EAB361742F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
|
||||
D11DB6422219C03000013FC3 /* Timer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = "<group>"; };
|
||||
D1BFAF762215795900845EA0 /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = "<group>"; };
|
||||
D1BFAF782215800A00845EA0 /* Counter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Counter.swift; sourceTree = "<group>"; };
|
||||
D1BFAF7A22158B4000845EA0 /* List.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = List.swift; sourceTree = "<group>"; };
|
||||
D1DEEC2822009E8000C525EE /* ModalRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalRouter.swift; sourceTree = "<group>"; };
|
||||
D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GluonTest.swift; sourceTree = "<group>"; };
|
||||
D1E6BCD121AD4CD6002769E3 /* TokamakTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokamakTest.swift; sourceTree = "<group>"; };
|
||||
D1F2C3262214407B008358DC /* TableModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableModal.swift; sourceTree = "<group>"; };
|
||||
D1F7185222159E09004E5951 /* Controls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Controls.swift; sourceTree = "<group>"; };
|
||||
D1F7185422159EAD004E5951 /* DatePickers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickers.swift; sourceTree = "<group>"; };
|
||||
D1F7185C2215A4A1004E5951 /* LayerProps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayerProps.swift; sourceTree = "<group>"; };
|
||||
D1F7185E2215A5D0004E5951 /* Constraints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constraints.swift; sourceTree = "<group>"; };
|
||||
D1F718602215A617004E5951 /* Modals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modals.swift; sourceTree = "<group>"; };
|
||||
E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Gluon_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-Gluon_Example/Pods-Gluon_Example.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
@ -73,14 +59,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
22E3415861D32D3493271FF2 /* libPods-Gluon_Example.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
607FACE21AFB9204008FA782 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C449B806DFEE55B6CEE6478C /* libPods-TokamakDemo.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -91,7 +70,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
607FACF51AFB993E008FA782 /* Podspec Metadata */,
|
||||
607FACD21AFB9204008FA782 /* Example for Gluon */,
|
||||
607FACD21AFB9204008FA782 /* TokamakDemo */,
|
||||
607FACE81AFB9204008FA782 /* Tests */,
|
||||
607FACD11AFB9204008FA782 /* Products */,
|
||||
D360275A0620D06017CFB567 /* Pods */,
|
||||
|
@ -104,17 +83,16 @@
|
|||
607FACD11AFB9204008FA782 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
607FACD01AFB9204008FA782 /* Gluon_Example.app */,
|
||||
607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */,
|
||||
607FACD01AFB9204008FA782 /* TokamakDemo.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
607FACD21AFB9204008FA782 /* Example for Gluon */ = {
|
||||
607FACD21AFB9204008FA782 /* TokamakDemo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
607FACD51AFB9204008FA782 /* AppDelegate.swift */,
|
||||
D1F7185122159D6E004E5951 /* Examples */,
|
||||
D1F7185122159D6E004E5951 /* Components */,
|
||||
607FACD71AFB9204008FA782 /* ViewController.swift */,
|
||||
D1BFAF762215795900845EA0 /* Router.swift */,
|
||||
607FACD91AFB9204008FA782 /* Main.storyboard */,
|
||||
|
@ -122,8 +100,8 @@
|
|||
607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
|
||||
607FACD31AFB9204008FA782 /* Supporting Files */,
|
||||
);
|
||||
name = "Example for Gluon";
|
||||
path = Gluon;
|
||||
name = TokamakDemo;
|
||||
path = Tokamak;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
607FACD31AFB9204008FA782 /* Supporting Files */ = {
|
||||
|
@ -137,7 +115,7 @@
|
|||
607FACE81AFB9204008FA782 /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */,
|
||||
D1E6BCD121AD4CD6002769E3 /* TokamakTest.swift */,
|
||||
607FACE91AFB9204008FA782 /* Supporting Files */,
|
||||
);
|
||||
path = Tests;
|
||||
|
@ -154,7 +132,6 @@
|
|||
607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C92866C2AA17B00C980C452 /* Gluon.podspec */,
|
||||
8CADEBB8BFF6F2621CA49E8F /* README.md */,
|
||||
C6DA99382B6892EAB361742F /* LICENSE */,
|
||||
);
|
||||
|
@ -164,13 +141,12 @@
|
|||
7C9590EA0938024ADB1C1A08 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C1B4A8D80770145FDAFEAE64 /* Pods_Gluon_Tests.framework */,
|
||||
23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */,
|
||||
5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D1F7185122159D6E004E5951 /* Examples */ = {
|
||||
D1F7185122159D6E004E5951 /* Components */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D1BFAF782215800A00845EA0 /* Counter.swift */,
|
||||
|
@ -184,14 +160,14 @@
|
|||
D1F2C3262214407B008358DC /* TableModal.swift */,
|
||||
D11DB6422219C03000013FC3 /* Timer.swift */,
|
||||
);
|
||||
path = Examples;
|
||||
path = Components;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D360275A0620D06017CFB567 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */,
|
||||
E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */,
|
||||
A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */,
|
||||
5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
|
@ -199,9 +175,9 @@
|
|||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
607FACCF1AFB9204008FA782 /* Gluon_Example */ = {
|
||||
607FACCF1AFB9204008FA782 /* TokamakDemo */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Example" */;
|
||||
buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TokamakDemo" */;
|
||||
buildPhases = (
|
||||
EC5FD3EFB14C0031402120B7 /* [CP] Check Pods Manifest.lock */,
|
||||
607FACCC1AFB9204008FA782 /* Sources */,
|
||||
|
@ -212,29 +188,11 @@
|
|||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Gluon_Example;
|
||||
productName = Gluon;
|
||||
productReference = 607FACD01AFB9204008FA782 /* Gluon_Example.app */;
|
||||
name = TokamakDemo;
|
||||
productName = Tokamak;
|
||||
productReference = 607FACD01AFB9204008FA782 /* TokamakDemo.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
607FACE41AFB9204008FA782 /* Gluon_Tests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Tests" */;
|
||||
buildPhases = (
|
||||
607FACE11AFB9204008FA782 /* Sources */,
|
||||
607FACE21AFB9204008FA782 /* Frameworks */,
|
||||
607FACE31AFB9204008FA782 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
607FACE71AFB9204008FA782 /* PBXTargetDependency */,
|
||||
);
|
||||
name = Gluon_Tests;
|
||||
productName = Tests;
|
||||
productReference = 607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
|
@ -243,23 +201,17 @@
|
|||
attributes = {
|
||||
LastSwiftUpdateCheck = 0830;
|
||||
LastUpgradeCheck = 1000;
|
||||
ORGANIZATIONNAME = Gluon;
|
||||
ORGANIZATIONNAME = Tokamak;
|
||||
TargetAttributes = {
|
||||
607FACCF1AFB9204008FA782 = {
|
||||
CreatedOnToolsVersion = 6.3.1;
|
||||
DevelopmentTeam = H4Z9Z4RD2G;
|
||||
LastSwiftMigration = 1000;
|
||||
};
|
||||
607FACE41AFB9204008FA782 = {
|
||||
CreatedOnToolsVersion = 6.3.1;
|
||||
DevelopmentTeam = H4Z9Z4RD2G;
|
||||
LastSwiftMigration = 1010;
|
||||
TestTargetID = 607FACCF1AFB9204008FA782;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Gluon" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Tokamak" */;
|
||||
compatibilityVersion = "Xcode 10.0";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
|
@ -271,8 +223,7 @@
|
|||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
607FACCF1AFB9204008FA782 /* Gluon_Example */,
|
||||
607FACE41AFB9204008FA782 /* Gluon_Tests */,
|
||||
607FACCF1AFB9204008FA782 /* TokamakDemo */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -288,13 +239,6 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
607FACE31AFB9204008FA782 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
|
@ -309,7 +253,7 @@
|
|||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Gluon_Example-checkManifestLockResult.txt",
|
||||
"$(DERIVED_FILE_DIR)/Pods-TokamakDemo-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
|
@ -339,24 +283,8 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
607FACE11AFB9204008FA782 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D1E6BCD221AD4CD6002769E3 /* GluonTest.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
607FACE71AFB9204008FA782 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 607FACCF1AFB9204008FA782 /* Gluon_Example */;
|
||||
targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
607FACD91AFB9204008FA782 /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
|
@ -424,7 +352,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
|
@ -472,25 +400,29 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
607FACF01AFB9204008FA782 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */;
|
||||
baseConfigurationReference = A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
|
||||
INFOPLIST_FILE = Gluon/Info.plist;
|
||||
INFOPLIST_FILE = Tokamak/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MODULE_NAME = ExampleApp;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.gluon.demo.Gluon-Example";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.tokamak.demo.TokamakDemo;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 4.2;
|
||||
};
|
||||
|
@ -498,65 +430,27 @@
|
|||
};
|
||||
607FACF11AFB9204008FA782 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */;
|
||||
baseConfigurationReference = 5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
|
||||
INFOPLIST_FILE = Gluon/Info.plist;
|
||||
INFOPLIST_FILE = Tokamak/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MODULE_NAME = ExampleApp;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.gluon.demo.Gluon-Example";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.tokamak.demo.TokamakDemo;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 4.2;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
607FACF31AFB9204008FA782 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = Tests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 4.2;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gluon_Example.app/Gluon_Example";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
607FACF41AFB9204008FA782 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = Tests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 4.2;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gluon_Example.app/Gluon_Example";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Gluon" */ = {
|
||||
607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Tokamak" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
607FACED1AFB9204008FA782 /* Debug */,
|
||||
|
@ -565,7 +459,7 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Example" */ = {
|
||||
607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TokamakDemo" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
607FACF01AFB9204008FA782 /* Debug */,
|
||||
|
@ -574,15 +468,6 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Tests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
607FACF31AFB9204008FA782 /* Debug */,
|
||||
607FACF41AFB9204008FA782 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 607FACC81AFB9204008FA782 /* Project object */;
|
|
@ -2,6 +2,6 @@
|
|||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Gluon.xcodeproj">
|
||||
location = "self:Tokamak.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -15,9 +15,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
|
||||
BuildableName = "Gluon_Example.app"
|
||||
BlueprintName = "Gluon_Example"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "TokamakDemo.app"
|
||||
BlueprintName = "TokamakDemo"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
|
@ -29,9 +29,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACE41AFB9204008FA782"
|
||||
BuildableName = "Gluon_Tests.xctest"
|
||||
BlueprintName = "Gluon_Tests"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "Tokamak_Tests.xctest"
|
||||
BlueprintName = "Tokamak_Tests"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
|
@ -47,9 +47,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACE41AFB9204008FA782"
|
||||
BuildableName = "Gluon_Tests.xctest"
|
||||
BlueprintName = "Gluon_Tests"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "Tokamak_Tests.xctest"
|
||||
BlueprintName = "Tokamak_Tests"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
|
@ -57,9 +57,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
|
||||
BuildableName = "Gluon_Example.app"
|
||||
BlueprintName = "Gluon_Example"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "TokamakDemo.app"
|
||||
BlueprintName = "TokamakDemo"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
|
@ -80,9 +80,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
|
||||
BuildableName = "Gluon_Example.app"
|
||||
BlueprintName = "Gluon_Example"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "TokamakDemo.app"
|
||||
BlueprintName = "TokamakDemo"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
|
@ -99,9 +99,9 @@
|
|||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
|
||||
BuildableName = "Gluon_Example.app"
|
||||
BlueprintName = "Gluon_Example"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
BuildableName = "TokamakDemo.app"
|
||||
BlueprintName = "TokamakDemo"
|
||||
ReferencedContainer = "container:Tokamak.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
|
@ -2,7 +2,7 @@
|
|||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Gluon.xcodeproj">
|
||||
location = "group:Tokamak.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// AppDelegate.swift
|
||||
// Gluon
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 09/15/2018.
|
||||
// Copyright (c) 2018 Max Desiatov. All rights reserved.
|
|
@ -1,12 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -16,14 +15,14 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 CocoaPods. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2019 Max Desiatov. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="440" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Gluon" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tokamak" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="139.5" width="440" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
|
@ -12,7 +12,7 @@
|
|||
<!--View Controller-->
|
||||
<scene sceneID="ufC-wZ-h7g">
|
||||
<objects>
|
||||
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModule="Gluon_Example" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModule="TokamakDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// Constraints.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct Constraints: LeafComponent {
|
||||
typealias Props = Null
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// Controls.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct Controls: LeafComponent {
|
||||
typealias Props = Null
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// Counter.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct Counter: LeafComponent {
|
||||
struct Props: Equatable {
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// DatePicker.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct DatePickers: LeafComponent {
|
||||
typealias Props = Null
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// LayerProps.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct LayerProps: LeafComponent {
|
||||
typealias Props = Null
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// List.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
private struct Cells: SimpleCellProvider {
|
||||
static func cell(
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// NavRouter.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 29/01/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct ModalRouter: NavigationRouter {
|
||||
enum Route {
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// Modals.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct NavigationModal: PureLeafComponent {
|
||||
struct Props: Equatable {
|
|
@ -1,11 +1,12 @@
|
|||
//
|
||||
// TableModal.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 13/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
import Gluon
|
||||
|
||||
import Tokamak
|
||||
|
||||
struct ListProvider: SimpleCellProvider {
|
||||
typealias Props = Null
|
|
@ -1,13 +1,13 @@
|
|||
//
|
||||
// Timer.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 17/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
struct TimerCounter: LeafComponent {
|
||||
typealias Props = Null
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// RootRouter.swift
|
||||
// Gluon_Example
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
// Copyright © 2019 Gluon. All rights reserved.
|
||||
// Copyright © 2019 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
enum AppRoute: String, CaseIterable {
|
||||
case list = "Examples"
|
|
@ -1,16 +1,16 @@
|
|||
//
|
||||
// ViewController.swift
|
||||
// Gluon
|
||||
// Tokamak_Example
|
||||
//
|
||||
// Created by Max Desiatov on 09/15/2018.
|
||||
// Copyright (c) 2018 Max Desiatov. All rights reserved.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import GluonUIKit
|
||||
import Tokamak
|
||||
import TokamakUIKit
|
||||
import UIKit
|
||||
|
||||
final class ViewController: GluonViewController {
|
||||
final class ViewController: TokamakViewController {
|
||||
override var node: AnyNode {
|
||||
return NavigationPresenter<Router>.node(.init(initial: .list))
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,109 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "9999"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "Gluon::GluonTestRenderer"
|
||||
BuildableName = "GluonTestRenderer.framework"
|
||||
BlueprintName = "GluonTestRenderer"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "Gluon::Gluon"
|
||||
BuildableName = "Gluon.framework"
|
||||
BlueprintName = "Gluon"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "Gluon::GluonUIKit"
|
||||
BuildableName = "GluonUIKit.framework"
|
||||
BlueprintName = "GluonUIKit"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "Gluon::GluonTests"
|
||||
BuildableName = "GluonTests.xctest"
|
||||
BlueprintName = "GluonTests"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "Gluon::GluonTestRenderer"
|
||||
BuildableName = "GluonTestRenderer.framework"
|
||||
BlueprintName = "GluonTestRenderer"
|
||||
ReferencedContainer = "container:Gluon.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -5,21 +5,21 @@
|
|||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "Gluon",
|
||||
name: "Tokamak",
|
||||
products: [
|
||||
// Products define the executables and libraries produced by a package,
|
||||
// and make them visible to other packages.
|
||||
.library(
|
||||
name: "Gluon",
|
||||
targets: ["Gluon"]
|
||||
name: "Tokamak",
|
||||
targets: ["Tokamak"]
|
||||
),
|
||||
.library(
|
||||
name: "GluonUIKit",
|
||||
targets: ["GluonUIKit"]
|
||||
name: "TokamakUIKit",
|
||||
targets: ["TokamakUIKit"]
|
||||
),
|
||||
.library(
|
||||
name: "GluonTestRenderer",
|
||||
targets: ["GluonTestRenderer"]
|
||||
name: "TokamakTestRenderer",
|
||||
targets: ["TokamakTestRenderer"]
|
||||
),
|
||||
],
|
||||
dependencies: [
|
||||
|
@ -32,20 +32,20 @@ let package = Package(
|
|||
// Targets can depend on other targets in this package, and on products
|
||||
// in packages which this package depends on.
|
||||
.target(
|
||||
name: "Gluon",
|
||||
name: "Tokamak",
|
||||
dependencies: []
|
||||
),
|
||||
.target(
|
||||
name: "GluonUIKit",
|
||||
dependencies: ["Gluon"]
|
||||
name: "TokamakUIKit",
|
||||
dependencies: ["Tokamak"]
|
||||
),
|
||||
.target(
|
||||
name: "GluonTestRenderer",
|
||||
dependencies: ["Gluon"]
|
||||
name: "TokamakTestRenderer",
|
||||
dependencies: ["Tokamak"]
|
||||
),
|
||||
.testTarget(
|
||||
name: "GluonTests",
|
||||
dependencies: ["GluonTestRenderer"]
|
||||
name: "TokamakTests",
|
||||
dependencies: ["TokamakTestRenderer"]
|
||||
),
|
||||
]
|
||||
)
|
||||
|
|
|
@ -8,5 +8,5 @@
|
|||
/// or specific system versions before calling newer APIs.
|
||||
|
||||
MACOSX_DEPLOYMENT_TARGET=10.13
|
||||
IPHONEOS_DEPLOYMENT_TARGET=10.0
|
||||
IPHONEOS_DEPLOYMENT_TARGET=11.0
|
||||
SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator
|
||||
|
|
128
README.md
128
README.md
|
@ -1,26 +1,26 @@
|
|||
# Gluon
|
||||
# Tokamak
|
||||
|
||||
## React-like framework for native UI written in pure Swift 🛠⚛️📲
|
||||
|
||||
[](https://travis-ci.org/MaxDesiatov/Gluon)
|
||||
[](https://codecov.io/gh/maxdesiatov/Gluon)
|
||||
[](https://travis-ci.org/MaxDesiatov/Tokamak)
|
||||
[](https://codecov.io/gh/maxdesiatov/Tokamak)
|
||||
<!--
|
||||
[](https://cocoapods.org/pods/Gluon)
|
||||
[](https://cocoapods.org/pods/Gluon)
|
||||
[](https://cocoapods.org/pods/Gluon)
|
||||
[](https://cocoapods.org/pods/Tokamak)
|
||||
[](https://cocoapods.org/pods/Tokamak)
|
||||
[](https://cocoapods.org/pods/Tokamak)
|
||||
-->
|
||||
|
||||
Gluon provides a declarative, testable and scalable API for building UI
|
||||
Tokamak provides a declarative, testable and scalable API for building UI
|
||||
components backed by fully native views. You can use it for your new iOS apps or
|
||||
add to existing apps with little effort and without rewriting the rest of the
|
||||
code or changing the app's overall architecture.
|
||||
|
||||
Gluon recreates [React Hooks API](https://reactjs.org/docs/hooks-intro.html)
|
||||
Tokamak recreates [React Hooks API](https://reactjs.org/docs/hooks-intro.html)
|
||||
improving it with Swift's strong type system, high performance and efficient
|
||||
memory management thanks to being compiled to a native binary.
|
||||
|
||||
When compared to standard UIKit MVC or other patterns built on top of
|
||||
it (MVVM, MVP, VIPER etc), Gluon provides:
|
||||
it (MVVM, MVP, VIPER etc), Tokamak provides:
|
||||
|
||||
* **Declarative [DSL](https://en.wikipedia.org/wiki/Domain-specific_language)
|
||||
for native UI**: no more conflicts caused by Storyboards, no template languages
|
||||
|
@ -33,31 +33,31 @@ state changes.
|
|||
|
||||
* **Clean composable architecture**: components can be passed to other
|
||||
components as children with an established API focused on code reuse. You can
|
||||
easily embed Gluon components within your existing UIKit code or vice versa:
|
||||
expose that code as Gluon components. No need to decide whether you should
|
||||
easily embed Tokamak components within your existing UIKit code or vice versa:
|
||||
expose that code as Tokamak components. No need to decide whether you should
|
||||
subclass `UIView` or `UIViewController` to make your UI composable.
|
||||
|
||||
* **Off-screen rendering for unit-tests**: no need to maintain slow and flaky UI
|
||||
tests that render everything on a simulator screen and simulate actual touch
|
||||
events. All of UI logic written with Gluon can be tested off-screen with tests
|
||||
events. All of UI logic written with Tokamak can be tested off-screen with tests
|
||||
completing in a fraction of a second. If your UI logic doesn't require any
|
||||
code specific to `UIKit` (and Gluon provides helpers to achieve that) you can
|
||||
code specific to `UIKit` (and Tokamak provides helpers to achieve that) you can
|
||||
even run your UI-related unit-tests on Linux!
|
||||
|
||||
* **Platform-independent core**: our main goal is to eventually support as many
|
||||
platforms as possible. Starting with iOS and UIKit, we plan to add renderers
|
||||
for macOS/AppKit, WebAssembly/DOM and native Android in future versions. As
|
||||
the core API is cross-platform, UI components written with Gluon won't need to
|
||||
the core API is cross-platform, UI components written with Tokamak won't need to
|
||||
change to become available on newly added platforms unless you need UI logic
|
||||
specific to a device or OS.
|
||||
|
||||
* **Architecture proven to work**: React has been available for years and
|
||||
gained a lot of traction and is still growing. We've seen so many apps
|
||||
successfully rebuilt with it and heard positive feedback on React itself, but
|
||||
a lot of complaints about overreliance on JavaScript. Gluon makes architecture
|
||||
a lot of complaints about overreliance on JavaScript. Tokamak makes architecture
|
||||
of React with its established patterns available to you in Swift.
|
||||
|
||||
_**Important:**_ Gluon is relatively stable at this point, as in not having any
|
||||
_**Important:**_ Tokamak is relatively stable at this point, as in not having any
|
||||
blocking or critical bugs that the maintainers are aware of. The core API of
|
||||
`Component` and `Hooks` types is frozen, and there's a plenty of [standard
|
||||
components](#standard-components) to start building useful apps. If in the
|
||||
|
@ -86,12 +86,12 @@ Nevertheless, its important to note this can't always be achieved.
|
|||
|
||||
## Example code
|
||||
|
||||
An example of a Gluon component that binds a button to a label, embedded
|
||||
An example of a Tokamak component that binds a button to a label, embedded
|
||||
within an existing UIKit app, looks like this:
|
||||
|
||||
```swift
|
||||
import Gluon
|
||||
import GluonUIKit
|
||||
import Tokamak
|
||||
import TokamakUIKit
|
||||
|
||||
struct Counter: LeafComponent {
|
||||
struct Props: Equatable {
|
||||
|
@ -111,23 +111,23 @@ struct Counter: LeafComponent {
|
|||
}
|
||||
}
|
||||
|
||||
final class ViewController: GluonViewController {
|
||||
final class ViewController: TokamakViewController {
|
||||
override var node: AnyNode {
|
||||
return Counter.node(.init(countFrom: 1))
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
To run the example project, clone the repo, and run `pod install` from the
|
||||
[`Example`](https://github.com/MaxDesiatov/Gluon/tree/master/Example) directory
|
||||
first. Then you can open `Example/Gluon.xcworkspace` and run the main
|
||||
executable target `Gluon-Example`.
|
||||
[`Example`](https://github.com/MaxDesiatov/Tokamak/tree/master/Example) directory
|
||||
first. Then you can open `Example/Tokamak.xcworkspace` and run the main
|
||||
executable target `Tokamak-Example`.
|
||||
|
||||
## Fundamental concepts
|
||||
|
||||
We try to keep Gluon's API as simple as possible and the core algorithm with
|
||||
We try to keep Tokamak's API as simple as possible and the core algorithm with
|
||||
supporting protocols/structures currently fit in only ~600 lines of code. It's
|
||||
all built upon a few basic concepts:
|
||||
|
||||
|
@ -154,7 +154,7 @@ struct Props: Equatable {
|
|||
|
||||
Sometimes "configuration" is described in a tree-like fashion. For example, a
|
||||
list of views contains an array of subviews, which themselves can contain other
|
||||
subviews. In Gluon this is called `Children`, which behave similar to `Props`,
|
||||
subviews. In Tokamak this is called `Children`, which behave similar to `Props`,
|
||||
but are important enough to be treated separately. `Children` are also immutable
|
||||
and `Equatable`, which allows us to observe those for changes too.
|
||||
|
||||
|
@ -173,7 +173,7 @@ protocol Component {
|
|||
(Don't worry if you don't know what `associatedtype` means, it's only a simple
|
||||
requirement for components to provide these types and make them `Equatable`. If
|
||||
you do know what a [PAT](https://www.youtube.com/watch?v=XWoNjiSPqI8) is, you
|
||||
also shouldn't worry. 😄 Gluon's API is built specifically to hide "sharp edges"
|
||||
also shouldn't worry. 😄 Tokamak's API is built specifically to hide "sharp edges"
|
||||
of PATs from the public API and to make it easy to use without requiring
|
||||
advanced knowledge of Swift. This is similar to what [Swift standard
|
||||
library](https://developer.apple.com/documentation/swift/swift_standard_library/)
|
||||
|
@ -183,20 +183,20 @@ has done, which is built on top of PATs but stays flexible and ergonomic).
|
|||
|
||||
A node is a container for `Props`, `Children` and a type conforming to
|
||||
`Component` rendering this "configuration". If you're familiar with React, nodes
|
||||
in Gluon correspond to [elements in
|
||||
in Tokamak correspond to [elements in
|
||||
React](https://reactjs.org/docs/glossary.html#elements). When `Children` is an
|
||||
array of nodes, we can indirectly form a tree describing the app's UI.
|
||||
Corollary, nodes are immutable and `Equatable`. You'd only need to use the
|
||||
standard `AnyNode` type provided by Gluon:
|
||||
standard `AnyNode` type provided by Tokamak:
|
||||
|
||||
```swift
|
||||
struct AnyNode: Equatable {
|
||||
// ... `Props` and `Children` stored here by Gluon as private properties
|
||||
// ... `Props` and `Children` stored here by Tokamak as private properties
|
||||
}
|
||||
```
|
||||
|
||||
Here's an example of an array of nodes used as `Children` in the standard
|
||||
`StackView` component provided by Gluon, which describe subviews of the stack
|
||||
`StackView` component provided by Tokamak, which describe subviews of the stack
|
||||
view.
|
||||
|
||||
```swift
|
||||
|
@ -208,11 +208,11 @@ struct StackView: Component {
|
|||
}
|
||||
```
|
||||
|
||||
For every component Gluon provides an easy way to create a node for it
|
||||
For every component Tokamak provides an easy way to create a node for it
|
||||
coupled with given props and children:
|
||||
|
||||
```swift
|
||||
// this extension and its `node` function are defined for you by Gluon
|
||||
// this extension and its `node` function are defined for you by Tokamak
|
||||
extension Component {
|
||||
static func node(_ props: Props, _ children: Children) -> AnyNode {
|
||||
// ...
|
||||
|
@ -235,28 +235,28 @@ function](https://en.wikipedia.org/wiki/Pure_function) taking `Props` and
|
|||
```swift
|
||||
protocol PureComponent: Component {
|
||||
// this is the function you define for your own components,
|
||||
// Gluon takes care of the rest
|
||||
// Tokamak takes care of the rest
|
||||
static func render(props: Props, children: Children) -> AnyNode
|
||||
}
|
||||
```
|
||||
|
||||
Gluon calls `render` on your components when their `Props` or `Children` passed
|
||||
Tokamak calls `render` on your components when their `Props` or `Children` passed
|
||||
from parent components change. You don't ever need to call `render` yourself,
|
||||
pass different values as props or children to nodes returned from parent
|
||||
`render` and Gluon will update only those views on screen that need to be
|
||||
`render` and Tokamak will update only those views on screen that need to be
|
||||
updated.
|
||||
|
||||
Note that `render` function does not return *other components*, it returns
|
||||
*nodes* that *describe other components*. It's a very important distiction,
|
||||
which allows Gluon to stay efficient and to avoid updating deep trees of
|
||||
which allows Tokamak to stay efficient and to avoid updating deep trees of
|
||||
components.
|
||||
|
||||
Some of your components wouldn't need `Children` at all, for those Gluon
|
||||
Some of your components wouldn't need `Children` at all, for those Tokamak
|
||||
provides a `PureLeafComponent` helper protocol that allows you to implement only
|
||||
a single function with a simpler signature:
|
||||
|
||||
```swift
|
||||
// Helpers provided by Gluon:
|
||||
// Helpers provided by Tokamak:
|
||||
|
||||
struct Null: Equatable {}
|
||||
|
||||
|
@ -278,7 +278,7 @@ Quite frequently you need components that are stateful or cause some other
|
|||
`Hooks` provide a clear separation between declarative components and other
|
||||
imperative code, such as state management, file I/O, networking etc.
|
||||
|
||||
The standard protocol `CompositeComponent` in Gluon gets `Hooks` injected into
|
||||
The standard protocol `CompositeComponent` in Tokamak gets `Hooks` injected into
|
||||
`render` function as an argument.
|
||||
|
||||
```swift
|
||||
|
@ -295,7 +295,7 @@ In fact, the standard `PureComponent` is a special case of a
|
|||
`CompositeComponent` that doesn't use `Hooks` during rendering:
|
||||
|
||||
```swift
|
||||
// Helpers provided by Gluon:
|
||||
// Helpers provided by Tokamak:
|
||||
|
||||
protocol PureComponent: CompositeComponent {
|
||||
static func render(props: Props, children: Children) -> AnyNode
|
||||
|
@ -351,7 +351,7 @@ struct State<T> {
|
|||
```
|
||||
|
||||
Note that `set` functions are not `mutating`, they never update the component's
|
||||
state in-place synchronously, but only schedule an update with Gluon at a later
|
||||
state in-place synchronously, but only schedule an update with Tokamak at a later
|
||||
time. A call to `render` is only scheduled on the component that obtained this
|
||||
state with `hooks.state`.
|
||||
|
||||
|
@ -379,10 +379,10 @@ ones: just add it to your `extension Hooks` wherever works best for you.
|
|||
|
||||
### Renderers
|
||||
|
||||
When mapping Gluon's architecture to what's previosly been established in iOS,
|
||||
When mapping Tokamak's architecture to what's previosly been established in iOS,
|
||||
`Component` corresponds to a "view-model" layer, while `Hooks` provide a reusable
|
||||
"controller" layer. A `Renderer` is a "view" layer in these terms, but it's
|
||||
fully managed by Gluon. Not only this greatly simplifies the code of your
|
||||
fully managed by Tokamak. Not only this greatly simplifies the code of your
|
||||
components and allows you to make it declarative, it also completely decouples
|
||||
platform-specific code. Note that `Counter` component above doesn't contain a
|
||||
single type from `UIKit` module, although the component itself is passed to a
|
||||
|
@ -399,11 +399,11 @@ requiring [Marzipan](https://www.imore.com/marzipan)!
|
|||
|
||||
### Standard components
|
||||
|
||||
Gluon provides a few basic components that you can reuse in your apps. On iOS
|
||||
Tokamak provides a few basic components that you can reuse in your apps. On iOS
|
||||
these components are rendered to corresponding `UIView` subclasses that you're
|
||||
already used to, e.g. `Button` component is rendered as `UIButton`, `Label` as
|
||||
`UILabel` etc. Check out [the complete up to date
|
||||
list](https://github.com/MaxDesiatov/Gluon/blob/master/gluon.sh/StandardComponents.md)
|
||||
list](https://github.com/MaxDesiatov/Tokamak/blob/master/tokamakui.org/StandardComponents.md)
|
||||
for more info.
|
||||
|
||||
## Requirements
|
||||
|
@ -431,7 +431,7 @@ Navigate to the project directory and create `Podfile` with the following comman
|
|||
$ pod install
|
||||
```
|
||||
|
||||
Inside of your `Podfile`, specify the `Gluon` pod:
|
||||
Inside of your `Podfile`, specify the `Tokamak` pod:
|
||||
|
||||
```ruby
|
||||
# Uncomment the next line to define a global platform for your project
|
||||
|
@ -442,7 +442,7 @@ target 'YourApp' do
|
|||
use_frameworks!
|
||||
|
||||
# Pods for Test
|
||||
pod 'Gluon', '~> 0.1'
|
||||
pod 'Tokamak', '~> 0.1'
|
||||
end
|
||||
```
|
||||
|
||||
|
@ -480,14 +480,14 @@ React](https://reactjs.org/docs/hooks-rules.html):
|
|||
4. Don't call Hooks from any function that's not a `static func render` on a
|
||||
component or not a custom Hook. ⚠️
|
||||
|
||||
In a future version Gluon will provide a linter able to catch violations of
|
||||
In a future version Tokamak will provide a linter able to catch violations of
|
||||
Rules of Hooks at compile time.
|
||||
|
||||
### Why do Rules of Hooks exist?
|
||||
|
||||
[Same as
|
||||
React](https://reactjs.org/docs/hooks-faq.html#how-does-react-associate-hook-calls-with-components),
|
||||
Gluon maintains an array of "memory cells" for every stateful component to hold
|
||||
Tokamak maintains an array of "memory cells" for every stateful component to hold
|
||||
the actual state. It needs to distinguish one Hooks call from another to map
|
||||
those to corresponding cells during execution of a `render` function of your
|
||||
component. Consider this:
|
||||
|
@ -522,7 +522,7 @@ struct ConditionalCounter: LeafComponent {
|
|||
}
|
||||
```
|
||||
|
||||
How does Gluon renderer know on subsequent calls to `DoubleCounter.render` which
|
||||
How does Tokamak renderer know on subsequent calls to `DoubleCounter.render` which
|
||||
state you're actually addressing? It relies on the order of those calls, so if
|
||||
the order dynamically changes from one rendering to another, you could
|
||||
unexpectedly get a value of the one state cell, when you expected a value of
|
||||
|
@ -558,7 +558,7 @@ struct ConditionalCounter: LeafComponent {
|
|||
}
|
||||
```
|
||||
|
||||
### Why does Gluon use value types and protocols instead of classes?
|
||||
### Why does Tokamak use value types and protocols instead of classes?
|
||||
|
||||
Swift developers focused on GUI might be used to classes thanks to abundance of
|
||||
class hierarchies in `UIKit` and `AppKit` (although [benefits of composition
|
||||
|
@ -572,8 +572,8 @@ Objective-C in mind, years before Swift became public and [protocol-oriented
|
|||
patterns](https://developer.apple.com/videos/play/wwdc2015/408/) were
|
||||
established.
|
||||
|
||||
One of the main goals of Gluon is to build a UI framework that feels native to
|
||||
Swift. Gluon's API brings these benefits when compared to class-based APIs:
|
||||
One of the main goals of Tokamak is to build a UI framework that feels native to
|
||||
Swift. Tokamak's API brings these benefits when compared to class-based APIs:
|
||||
|
||||
- no need to [subclass `NSObject` to conform to commonly used
|
||||
protocols](https://stackoverflow.com/questions/31754366/swift-my-custom-uitableviewdatasource-class-thinks-it-doesnt-conform-to-protoc);
|
||||
|
@ -594,11 +594,11 @@ Swift. Gluon's API brings these benefits when compared to class-based APIs:
|
|||
imperative code when needed: value types guarantee lack of unexpected
|
||||
side effects in pure functions.
|
||||
|
||||
### Is there anything like [JSX](https://reactjs.org/docs/jsx-in-depth.html) available for Gluon?
|
||||
### Is there anything like [JSX](https://reactjs.org/docs/jsx-in-depth.html) available for Tokamak?
|
||||
|
||||
At the moment the answer is no, but we find that Gluon's API allows you to
|
||||
At the moment the answer is no, but we find that Tokamak's API allows you to
|
||||
create nodes much more concisely when compared to [`React.createElement`
|
||||
syntax](https://reactjs.org/docs/react-without-jsx.html). In fact, with Gluon's
|
||||
syntax](https://reactjs.org/docs/react-without-jsx.html). In fact, with Tokamak's
|
||||
`.node` API you don't need closing element tags you'd have to write with JSX.
|
||||
E.g. compare this:
|
||||
|
||||
|
@ -614,12 +614,12 @@ to this:
|
|||
|
||||
We do agree that there's an overhead of `.init` for props and a requirement of
|
||||
props initializer arguments to be ordered. For the latter, we have a helpful
|
||||
convention in Gluon that all named arguments to props initializers should be
|
||||
convention in Tokamak that all named arguments to props initializers should be
|
||||
ordered alphabetically.
|
||||
|
||||
The main problem is that currently there's no easily extensible Swift parser or
|
||||
a macro system available that would allow something like JSX to be used for
|
||||
Gluon. As soon is it becomes easy to implement, we'd definitely consider it as
|
||||
Tokamak. As soon is it becomes easy to implement, we'd definitely consider it as
|
||||
an option.
|
||||
|
||||
### Why is `render` function `static` on `Component` protocol?
|
||||
|
@ -661,7 +661,7 @@ struct Counter {
|
|||
}
|
||||
|
||||
|
||||
// Gluon does something like this internally for your components,
|
||||
// Tokamak does something like this internally for your components,
|
||||
// consider following a pseudocode:
|
||||
let xComponent = Counter.self
|
||||
let yComponent = OtherComponent.self
|
||||
|
@ -716,9 +716,9 @@ state, while intended local state is managed with `Hooks`.
|
|||
## Contributing
|
||||
|
||||
This project adheres to the [Contributor Covenant Code of
|
||||
Conduct](https://github.com/MaxDesiatov/Gluon/blob/master/CODE_OF_CONDUCT.md).
|
||||
Conduct](https://github.com/MaxDesiatov/Tokamak/blob/master/CODE_OF_CONDUCT.md).
|
||||
By participating, you are expected to uphold this code. Please report
|
||||
unacceptable behavior to conduct@gluon.sh.
|
||||
unacceptable behavior to conduct@tokamakui.org.
|
||||
|
||||
## Maintainers
|
||||
|
||||
|
@ -727,6 +727,6 @@ Hodovaniuk](https://matvii.hodovani.uk)
|
|||
|
||||
## License
|
||||
|
||||
Gluon is available under the Apache 2.0 license. See the
|
||||
[LICENSE](https://github.com/MaxDesiatov/Gluon/blob/master/LICENSE) file for
|
||||
Tokamak is available under the Apache 2.0 license. See the
|
||||
[LICENSE](https://github.com/MaxDesiatov/Tokamak/blob/master/LICENSE) file for
|
||||
more info.
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
//
|
||||
// Slider.swift
|
||||
// Gluon
|
||||
//
|
||||
// Created by Max Desiatov on 29/12/2018.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import UIKit
|
||||
|
||||
final class GluonSlider: UISlider, Default, ValueStorage {
|
||||
static var defaultValue: GluonSlider {
|
||||
return GluonSlider()
|
||||
}
|
||||
}
|
||||
|
||||
extension Slider: UIValueComponent {
|
||||
typealias Target = GluonSlider
|
||||
|
||||
static func update(valueBox: ValueControlBox<GluonSlider>,
|
||||
_ props: Slider.Props,
|
||||
_ children: Null) {}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
//
|
||||
// Stepper.swift
|
||||
// Gluon
|
||||
//
|
||||
// Created by Matvii Hodovaniuk on 1/21/19.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import UIKit
|
||||
|
||||
final class GluonStepper: UIStepper, Default, ValueStorage {
|
||||
static var defaultValue: GluonStepper {
|
||||
return GluonStepper()
|
||||
}
|
||||
}
|
||||
|
||||
extension Stepper: UIValueComponent {
|
||||
typealias Target = GluonStepper
|
||||
|
||||
static func update(valueBox: ValueControlBox<GluonStepper>,
|
||||
_ props: Stepper.Props,
|
||||
_ children: Null) {}
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// AnyEquatable.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 06/11/2018.
|
||||
//
|
||||
|
||||
/** Type-erased version of `Equatable` that allows you to compare values of
|
||||
different types. Main use of `AnyEquatable` in Gluon is to wrap `Props` and
|
||||
different types. Main use of `AnyEquatable` in Tokamak is to wrap `Props` and
|
||||
`Children` before storing those in `AnyNode`.
|
||||
|
||||
Example:
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Node.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 30/11/2018.
|
||||
//
|
|
@ -1,13 +1,13 @@
|
|||
//
|
||||
// Component.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 07/10/2018.
|
||||
//
|
||||
|
||||
/// Type-erased version of `HostComponent` to work around [PAT restrictions](
|
||||
/// http://www.russbishop.net/swift-associated-types). Users
|
||||
/// of Gluon shouldn't ever need to conform to this protocol directly, use
|
||||
/// of Tokamak shouldn't ever need to conform to this protocol directly, use
|
||||
/// `HostComponent` instead.
|
||||
public protocol AnyHostComponent {}
|
||||
|
||||
|
@ -19,7 +19,7 @@ public protocol RefComponent: HostComponent {
|
|||
|
||||
/// Type-erased version of `CompositeComponent` to work around
|
||||
/// [PAT restrictions](http://www.russbishop.net/swift-associated-types). Users
|
||||
/// of Gluon shouldn't ever need to conform to this protocol directly, use
|
||||
/// of Tokamak shouldn't ever need to conform to this protocol directly, use
|
||||
/// `CompositeComponent` instead.
|
||||
public protocol AnyCompositeComponent {
|
||||
static func render(
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Alert.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 31/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Animated.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Button.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/12/2018.
|
||||
//
|
|
@ -1,10 +1,12 @@
|
|||
//
|
||||
// DatePicker.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Matvii Hodovaniuk on 2/4/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct DatePicker: HostComponent {
|
||||
public struct Props: Equatable, ControlProps, StyleProps,
|
||||
ValueControlProps {
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Label.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// ListView.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 21/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// NavigationController.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 06/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// SegmentedControl.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 05/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Slider.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 29/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// StackView.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Stepper.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Matvii Hodovaniuk on 1/21/19.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Switch.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Matvii Hodovaniuk on 1/21/19.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// View.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 29/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// ModalPresenter.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 31/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// NavigationItem.swift
|
||||
// GluonUIKit
|
||||
// TokamakUIKit
|
||||
//
|
||||
// Created by Max Desiatov on 04/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// NavigationPresenter.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 31/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Router.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 03/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// TabItem.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 04/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// TabPresenter.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 31/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Color.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 16/10/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Bottom.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Center.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// CenterX.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// CenterY.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Constraint.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 16/10/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Edges.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// FirstBaseline.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Height.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// LastBaseline.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Leading.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Left.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Right.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// SizeConstraint.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Top.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Trailing.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Width.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 02/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Event.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 04/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Insets.swift
|
||||
// GluonUIKit
|
||||
// TokamakUIKit
|
||||
//
|
||||
// Created by Max Desiatov on 17/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// LineBreakMode.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 14/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Rectangle.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 29/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Second.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 05/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Style.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 31/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// TextAlignment.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 30/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Default.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 16/11/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Effect.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 10/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Hooks.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 06/11/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Ref.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 09/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// State.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 09/02/2019.
|
||||
//
|
||||
|
@ -19,7 +19,7 @@ typealias Updater<T> = (inout T) -> ()
|
|||
|
||||
/** Note that `set` functions are not `mutating`, they never update the
|
||||
component's state in-place synchronously, but only schedule an update with
|
||||
Gluon at a later time. A call to `render` is only scheduled on the component
|
||||
Tokamak at a later time. A call to `render` is only scheduled on the component
|
||||
that obtained this state with `hooks.state`.
|
||||
*/
|
||||
public struct State<T> {
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// MountedComponent.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 28/11/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// MountedCompositeComponent.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 03/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// MountedHostComponent.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 03/12/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// MountedNull.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 05/01/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Null.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 16/11/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// UIKitRenderer.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 07/10/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// StackReconciler.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 28/11/2018.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Target.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 10/02/2019.
|
||||
//
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Unique.swift
|
||||
// Gluon
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 06/11/2018.
|
||||
//
|
|
@ -1,11 +1,11 @@
|
|||
//
|
||||
// TestRenderer.swift
|
||||
// GluonTestRenderer
|
||||
// TokamakTestRenderer
|
||||
//
|
||||
// Created by Max Desiatov on 21/12/2018.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
public final class TestRenderer: Renderer {
|
||||
public private(set) var reconciler: StackReconciler<TestRenderer>?
|
|
@ -1,11 +1,11 @@
|
|||
//
|
||||
// TestView.swift
|
||||
// GluonTestRenderer
|
||||
// TokamakTestRenderer
|
||||
//
|
||||
// Created by Max Desiatov on 18/12/2018.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
|
||||
/// A class that `TestRenderer` uses as a target.
|
||||
/// When rendering to a `TestView` instance it is possible
|
|
@ -1,11 +1,11 @@
|
|||
//
|
||||
// ContainerViewController.swift
|
||||
// GluonUIKit
|
||||
// TokamakUIKit
|
||||
//
|
||||
// Created by Max Desiatov on 01/01/2019.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
import UIKit
|
||||
|
||||
final class ContainerViewController: UIViewController {
|
|
@ -1,11 +1,11 @@
|
|||
//
|
||||
// ControlBox.swift
|
||||
// GluonUIKit
|
||||
// TokamakUIKit
|
||||
//
|
||||
// Created by Max Desiatov on 01/01/2019.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
import UIKit
|
||||
|
||||
final class Action {
|
|
@ -1,14 +1,14 @@
|
|||
//
|
||||
// TableViewBox.swift
|
||||
// GluonUIKit
|
||||
// TokamakUIKit
|
||||
//
|
||||
// Created by Max Desiatov on 26/01/2019.
|
||||
//
|
||||
|
||||
import Gluon
|
||||
import Tokamak
|
||||
import UIKit
|
||||
|
||||
final class GluonTableCell: UITableViewCell {
|
||||
final class TokamakTableCell: UITableViewCell {
|
||||
// FIXME: `component` has a strong reference to `box` through its own
|
||||
// property `target`, should that be `weak` to break a potential reference
|
||||
// cycle?
|
||||
|
@ -62,11 +62,11 @@ private final class DataSource<T: CellProvider>: NSObject,
|
|||
|
||||
if let cell = tableView.dequeueReusableCell(
|
||||
withIdentifier: id.rawValue
|
||||
) as? GluonTableCell, let component = cell.component {
|
||||
) as? TokamakTableCell, let component = cell.component {
|
||||
renderer?.update(component: component, with: node)
|
||||
return cell
|
||||
} else {
|
||||
let result = GluonTableCell(
|
||||
let result = TokamakTableCell(
|
||||
style: .default,
|
||||
reuseIdentifier: id.rawValue
|
||||
)
|
||||
|
@ -96,13 +96,13 @@ private final class Delegate<T: CellProvider>: NSObject, UITableViewDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
final class GluonTableView: UITableView, Default {
|
||||
static var defaultValue: GluonTableView {
|
||||
return GluonTableView()
|
||||
final class TokamakTableView: UITableView, Default {
|
||||
static var defaultValue: TokamakTableView {
|
||||
return TokamakTableView()
|
||||
}
|
||||
}
|
||||
|
||||
final class TableViewBox<T: CellProvider>: ViewBox<GluonTableView> {
|
||||
final class TableViewBox<T: CellProvider>: ViewBox<TokamakTableView> {
|
||||
private let dataSource: DataSource<T>
|
||||
|
||||
// this delegate stays as a constant and doesn't create a reference cycle
|
||||
|
@ -124,7 +124,7 @@ final class TableViewBox<T: CellProvider>: ViewBox<GluonTableView> {
|
|||
}
|
||||
|
||||
init(
|
||||
_ view: GluonTableView,
|
||||
_ view: TokamakTableView,
|
||||
_ viewController: UIViewController,
|
||||
_ component: UIKitRenderer.MountedHost,
|
||||
_ props: ListView<T>.Props,
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue