Implemented colour picker, TODO: change plan cell colour to selected colours, make CollectionView refresh on colour picked, change selection visualisation in colour picker

This commit is contained in:
Deniz Duezgoeren
2019-07-21 21:14:38 +02:00
parent c041e67064
commit 13b9721c00
22 changed files with 1288 additions and 1224 deletions
+28 -4
View File
@@ -23,6 +23,12 @@
A96D4CCA22DDE184006BAB34 /* PersonalPlanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96D4CC922DDE184006BAB34 /* PersonalPlanViewController.swift */; }; A96D4CCA22DDE184006BAB34 /* PersonalPlanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96D4CC922DDE184006BAB34 /* PersonalPlanViewController.swift */; };
A996BFF922E05AAB00E7BE42 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A996BFFB22E05AAB00E7BE42 /* InfoPlist.strings */; }; A996BFF922E05AAB00E7BE42 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A996BFFB22E05AAB00E7BE42 /* InfoPlist.strings */; };
A9A3496C22D4859200F35AE0 /* SubstModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A3496B22D4859200F35AE0 /* SubstModel.swift */; }; A9A3496C22D4859200F35AE0 /* SubstModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A3496B22D4859200F35AE0 /* SubstModel.swift */; };
A9B033D822E4D0AB009ACF8A /* ColourViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B033D622E4D0AB009ACF8A /* ColourViewCell.swift */; };
A9B033D922E4D0AB009ACF8A /* ColourViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9B033D722E4D0AB009ACF8A /* ColourViewCell.xib */; };
A9B0464C22E1F255005FB0DB /* CustomTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B0464B22E1F255005FB0DB /* CustomTabBarController.swift */; };
A9B0464E22E1F75A005FB0DB /* CustomizationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B0464D22E1F75A005FB0DB /* CustomizationViewController.swift */; };
A9B0465022E21207005FB0DB /* ColourPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B0464F22E21207005FB0DB /* ColourPickerView.swift */; };
A9B0465422E448EC005FB0DB /* GenericViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B0465322E448EC005FB0DB /* GenericViewCell.swift */; };
A9C1D2FE22D656A400139043 /* InfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D2FD22D656A400139043 /* InfoViewController.swift */; }; A9C1D2FE22D656A400139043 /* InfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D2FD22D656A400139043 /* InfoViewController.swift */; };
A9C1D30022D656DD00139043 /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D2FF22D656DD00139043 /* MenuViewController.swift */; }; A9C1D30022D656DD00139043 /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D2FF22D656DD00139043 /* MenuViewController.swift */; };
A9C1D30222D7237200139043 /* DataFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D30122D7237200139043 /* DataFetcher.swift */; }; A9C1D30222D7237200139043 /* DataFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C1D30122D7237200139043 /* DataFetcher.swift */; };
@@ -75,6 +81,12 @@
A996BFFC22E05AAB00E7BE42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; A996BFFC22E05AAB00E7BE42 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
A996BFFD22E05AAB00E7BE42 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; }; A996BFFD22E05AAB00E7BE42 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
A9A3496B22D4859200F35AE0 /* SubstModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstModel.swift; sourceTree = "<group>"; }; A9A3496B22D4859200F35AE0 /* SubstModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstModel.swift; sourceTree = "<group>"; };
A9B033D622E4D0AB009ACF8A /* ColourViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColourViewCell.swift; sourceTree = "<group>"; };
A9B033D722E4D0AB009ACF8A /* ColourViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ColourViewCell.xib; sourceTree = "<group>"; };
A9B0464B22E1F255005FB0DB /* CustomTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTabBarController.swift; sourceTree = "<group>"; };
A9B0464D22E1F75A005FB0DB /* CustomizationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomizationViewController.swift; sourceTree = "<group>"; };
A9B0464F22E21207005FB0DB /* ColourPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColourPickerView.swift; sourceTree = "<group>"; };
A9B0465322E448EC005FB0DB /* GenericViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenericViewCell.swift; sourceTree = "<group>"; };
A9C1D2FD22D656A400139043 /* InfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoViewController.swift; sourceTree = "<group>"; }; A9C1D2FD22D656A400139043 /* InfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoViewController.swift; sourceTree = "<group>"; };
A9C1D2FF22D656DD00139043 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; }; A9C1D2FF22D656DD00139043 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = "<group>"; };
A9C1D30122D7237200139043 /* DataFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataFetcher.swift; sourceTree = "<group>"; }; A9C1D30122D7237200139043 /* DataFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataFetcher.swift; sourceTree = "<group>"; };
@@ -182,6 +194,12 @@
A96D4CC922DDE184006BAB34 /* PersonalPlanViewController.swift */, A96D4CC922DDE184006BAB34 /* PersonalPlanViewController.swift */,
A958A92422DF5388007052B0 /* Localizable.strings */, A958A92422DF5388007052B0 /* Localizable.strings */,
A996BFFB22E05AAB00E7BE42 /* InfoPlist.strings */, A996BFFB22E05AAB00E7BE42 /* InfoPlist.strings */,
A9B0464B22E1F255005FB0DB /* CustomTabBarController.swift */,
A9B0464D22E1F75A005FB0DB /* CustomizationViewController.swift */,
A9B0464F22E21207005FB0DB /* ColourPickerView.swift */,
A9B0465322E448EC005FB0DB /* GenericViewCell.swift */,
A9B033D622E4D0AB009ACF8A /* ColourViewCell.swift */,
A9B033D722E4D0AB009ACF8A /* ColourViewCell.xib */,
); );
path = "AvH Plan"; path = "AvH Plan";
sourceTree = "<group>"; sourceTree = "<group>";
@@ -315,6 +333,7 @@
files = ( files = (
A961338C2299867A00B541D4 /* LaunchScreen.storyboard in Resources */, A961338C2299867A00B541D4 /* LaunchScreen.storyboard in Resources */,
A958A92222DF5388007052B0 /* Localizable.strings in Resources */, A958A92222DF5388007052B0 /* Localizable.strings in Resources */,
A9B033D922E4D0AB009ACF8A /* ColourViewCell.xib in Resources */,
A957A75222DDC15500E0A2ED /* MenuViewCell.xib in Resources */, A957A75222DDC15500E0A2ED /* MenuViewCell.xib in Resources */,
A996BFF922E05AAB00E7BE42 /* InfoPlist.strings in Resources */, A996BFF922E05AAB00E7BE42 /* InfoPlist.strings in Resources */,
A96133892299867A00B541D4 /* Assets.xcassets in Resources */, A96133892299867A00B541D4 /* Assets.xcassets in Resources */,
@@ -416,7 +435,6 @@
inputPaths = ( inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-AvH Plan/Pods-AvH Plan-frameworks.sh", "${PODS_ROOT}/Target Support Files/Pods-AvH Plan/Pods-AvH Plan-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework", "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework",
"${BUILT_PRODUCTS_DIR}/Kanna/Kanna.framework",
"${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework", "${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework",
"${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework", "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework",
"${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework", "${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework",
@@ -426,7 +444,6 @@
); );
outputPaths = ( outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kanna.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MagazineLayout.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MagazineLayout.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SQLite.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SQLite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework",
@@ -443,16 +460,21 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A9B0465422E448EC005FB0DB /* GenericViewCell.swift in Sources */,
A9B0464E22E1F75A005FB0DB /* CustomizationViewController.swift in Sources */,
A96133802299867400B541D4 /* AppDelegate.swift in Sources */, A96133802299867400B541D4 /* AppDelegate.swift in Sources */,
A9A3496C22D4859200F35AE0 /* SubstModel.swift in Sources */, A9A3496C22D4859200F35AE0 /* SubstModel.swift in Sources */,
A9C1D30022D656DD00139043 /* MenuViewController.swift in Sources */, A9C1D30022D656DD00139043 /* MenuViewController.swift in Sources */,
A957A75122DDC15500E0A2ED /* MenuViewCell.swift in Sources */, A957A75122DDC15500E0A2ED /* MenuViewCell.swift in Sources */,
A9C1D2FE22D656A400139043 /* InfoViewController.swift in Sources */, A9C1D2FE22D656A400139043 /* InfoViewController.swift in Sources */,
A9B0464C22E1F255005FB0DB /* CustomTabBarController.swift in Sources */,
A9D830A722DE258C00D7EA05 /* PlanViewCell.swift in Sources */, A9D830A722DE258C00D7EA05 /* PlanViewCell.swift in Sources */,
A96D4CC822DDE01A006BAB34 /* GeneralPlanViewController.swift in Sources */, A96D4CC822DDE01A006BAB34 /* GeneralPlanViewController.swift in Sources */,
A96133822299867400B541D4 /* PlanViewController.swift in Sources */, A96133822299867400B541D4 /* PlanViewController.swift in Sources */,
A9C1D30222D7237200139043 /* DataFetcher.swift in Sources */, A9C1D30222D7237200139043 /* DataFetcher.swift in Sources */,
A96D4CCA22DDE184006BAB34 /* PersonalPlanViewController.swift in Sources */, A96D4CCA22DDE184006BAB34 /* PersonalPlanViewController.swift in Sources */,
A9B033D822E4D0AB009ACF8A /* ColourViewCell.swift in Sources */,
A9B0465022E21207005FB0DB /* ColourPickerView.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -567,7 +589,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_IDENTITY = "iPhone Developer: k.duezgoeren@gmail.com (R9NVDFCQHW)";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -629,7 +651,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_IDENTITY = "iPhone Developer: k.duezgoeren@gmail.com (R9NVDFCQHW)";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO; ENABLE_NS_ASSERTIONS = NO;
@@ -659,6 +681,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 7D4AT23XH8;
INFOPLIST_FILE = "$(SRCROOT)/AvH PlanTests/Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/AvH PlanTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -678,6 +701,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 7D4AT23XH8;
INFOPLIST_FILE = "$(SRCROOT)/AvH PlanTests/Info.plist"; INFOPLIST_FILE = "$(SRCROOT)/AvH PlanTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -10,5 +10,23 @@
<integer>8</integer> <integer>8</integer>
</dict> </dict>
</dict> </dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>A961337B2299867300B541D4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>A96133912299867A00B541D4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>A961339C2299867A00B541D4</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict> </dict>
</plist> </plist>
+176 -3
View File
@@ -46,7 +46,7 @@
<!--Personal--> <!--Personal-->
<scene sceneID="wg7-f3-ORb"> <scene sceneID="wg7-f3-ORb">
<objects> <objects>
<viewController id="8rJ-Kc-sve" customClass="PersonalPlanViewController" customModule="AvH_Plan" customModuleProvider="target" sceneMemberID="viewController"> <viewController storyboardIdentifier="CustomizationViewController" id="8rJ-Kc-sve" customClass="PersonalPlanViewController" customModule="AvH_Plan" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW"> <view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
<rect key="frame" x="0.0" y="0.0" width="414" height="813"/> <rect key="frame" x="0.0" y="0.0" width="414" height="813"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -58,7 +58,8 @@
<navigationItem title="Personal Plan" id="8j4-CR-EDO"> <navigationItem title="Personal Plan" id="8j4-CR-EDO">
<barButtonItem key="rightBarButtonItem" title="Customize" id="iH8-LX-SKF"> <barButtonItem key="rightBarButtonItem" title="Customize" id="iH8-LX-SKF">
<connections> <connections>
<action selector="toolbarButtonCustomise:" destination="8rJ-Kc-sve" id="XTh-6F-m3e"/> <action selector="navBarButton:" destination="8rJ-Kc-sve" id="FA8-tv-rLI"/>
<segue destination="8XB-jK-YFD" kind="show" id="HR4-ZO-fnF"/>
</connections> </connections>
</barButtonItem> </barButtonItem>
</navigationItem> </navigationItem>
@@ -82,6 +83,178 @@
</objects> </objects>
<point key="canvasLocation" x="1489.8550724637682" y="-321.42857142857139"/> <point key="canvasLocation" x="1489.8550724637682" y="-321.42857142857139"/>
</scene> </scene>
<!--Customization View Controller-->
<scene sceneID="gAv-U3-QPB">
<objects>
<viewController id="8XB-jK-YFD" customClass="CustomizationViewController" customModule="AvH_Plan" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="3L4-c2-Pow">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<navigationBar contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" layoutMarginsFollowReadableWidth="YES" translucent="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1XB-6S-dGV">
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
<items>
<navigationItem title="Customize" id="9Pf-pB-wLS">
<barButtonItem key="rightBarButtonItem" title="Done" id="PWA-cp-z6o">
<connections>
<action selector="done:" destination="8XB-jK-YFD" id="7wR-PO-v0i"/>
</connections>
</barButtonItem>
</navigationItem>
</items>
</navigationBar>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your name" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="TpM-Mz-EpI">
<rect key="frame" x="24" y="112" width="366" height="30"/>
<accessibility key="accessibilityConfiguration" hint="Name"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your classes" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="bCV-w1-hVY">
<rect key="frame" x="24" y="158" width="366" height="30"/>
<accessibility key="accessibilityConfiguration" hint="Classes"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Your courses" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="69O-Fo-TQF">
<rect key="frame" x="24" y="204" width="366" height="30"/>
<accessibility key="accessibilityConfiguration" hint="Courses"/>
<nil key="textColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="hWP-3N-RUn">
<rect key="frame" x="8" y="352" width="398" height="486"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<collectionViewLayout key="collectionViewLayout" id="sCM-Sc-0Zw" customClass="MagazineLayout" customModule="MagazineLayout"/>
<cells/>
<connections>
<outlet property="dataSource" destination="8XB-jK-YFD" id="mHC-Am-kkd"/>
<outlet property="delegate" destination="8XB-jK-YFD" id="cTM-du-BOk"/>
</connections>
</collectionView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Default plan" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hkV-XP-jXe">
<rect key="frame" x="24" y="250" width="366" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Custom colours" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rks-gf-AM4">
<rect key="frame" x="24" y="323" width="366" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="omP-RH-Hlh">
<rect key="frame" x="24" y="279" width="366" height="29"/>
<segments>
<segment title="General"/>
<segment title="Personal"/>
</segments>
</segmentedControl>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="iN7-lf-GS3" firstAttribute="bottom" secondItem="hWP-3N-RUn" secondAttribute="bottom" constant="24" id="3pJ-hl-GCJ"/>
<constraint firstItem="TpM-Mz-EpI" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="7Ng-ON-AQ6"/>
<constraint firstItem="bCV-w1-hVY" firstAttribute="top" secondItem="TpM-Mz-EpI" secondAttribute="bottom" constant="16" id="9ex-Jw-qBO"/>
<constraint firstItem="hkV-XP-jXe" firstAttribute="top" secondItem="69O-Fo-TQF" secondAttribute="bottom" constant="16" id="9fR-TP-JaT"/>
<constraint firstItem="TpM-Mz-EpI" firstAttribute="top" secondItem="1XB-6S-dGV" secondAttribute="bottom" constant="24" id="Bgw-zQ-6lf"/>
<constraint firstItem="bCV-w1-hVY" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="CPw-u9-bVh"/>
<constraint firstItem="rks-gf-AM4" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="HdU-p4-Goh"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="TpM-Mz-EpI" secondAttribute="trailing" constant="24" id="JRY-Id-RvJ"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="hWP-3N-RUn" secondAttribute="trailing" constant="8" id="Jty-qn-j3D"/>
<constraint firstItem="hkV-XP-jXe" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="LC6-o0-HSh"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="rks-gf-AM4" secondAttribute="trailing" constant="24" id="LNt-n8-sve"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="bCV-w1-hVY" secondAttribute="trailing" constant="24" id="ND8-7l-QRM"/>
<constraint firstItem="69O-Fo-TQF" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="Rfy-KZ-OF1"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="1XB-6S-dGV" secondAttribute="trailing" id="ViL-Rg-PN8"/>
<constraint firstItem="hWP-3N-RUn" firstAttribute="top" secondItem="rks-gf-AM4" secondAttribute="bottom" constant="8" id="YSc-4u-eGx"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="hkV-XP-jXe" secondAttribute="trailing" constant="24" id="YiF-gB-Ipi"/>
<constraint firstItem="hWP-3N-RUn" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="8" id="c9W-lx-Lt1"/>
<constraint firstItem="69O-Fo-TQF" firstAttribute="top" secondItem="bCV-w1-hVY" secondAttribute="bottom" constant="16" id="d28-3O-3GO"/>
<constraint firstItem="omP-RH-Hlh" firstAttribute="leading" secondItem="iN7-lf-GS3" secondAttribute="leading" constant="24" id="nDZ-Hu-019"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="omP-RH-Hlh" secondAttribute="trailing" constant="24" id="per-wQ-baW"/>
<constraint firstItem="iN7-lf-GS3" firstAttribute="trailing" secondItem="69O-Fo-TQF" secondAttribute="trailing" constant="24" id="tEy-M0-XwI"/>
<constraint firstItem="omP-RH-Hlh" firstAttribute="top" secondItem="hkV-XP-jXe" secondAttribute="bottom" constant="8" id="teR-bN-0UV"/>
<constraint firstItem="1XB-6S-dGV" firstAttribute="top" secondItem="iN7-lf-GS3" secondAttribute="top" id="uz5-3l-eKb"/>
<constraint firstItem="1XB-6S-dGV" firstAttribute="leading" secondItem="3L4-c2-Pow" secondAttribute="leading" id="vnV-AO-wgT"/>
<constraint firstItem="rks-gf-AM4" firstAttribute="top" secondItem="omP-RH-Hlh" secondAttribute="bottom" constant="16" id="xgD-fy-RGr"/>
</constraints>
<viewLayoutGuide key="safeArea" id="iN7-lf-GS3"/>
</view>
<navigationItem key="navigationItem" id="xDt-o1-FZQ"/>
<connections>
<outlet property="collectionView" destination="hWP-3N-RUn" id="RFo-DP-uPX"/>
<outlet property="defaultSegments" destination="omP-RH-Hlh" id="hVo-ND-9EG"/>
<outlet property="toolbar" destination="1XB-6S-dGV" id="1Yf-SM-ANg"/>
<outlet property="txtClasses" destination="bCV-w1-hVY" id="lDD-NQ-f8f"/>
<outlet property="txtCourses" destination="69O-Fo-TQF" id="AC7-pO-Jms"/>
<outlet property="txtName" destination="TpM-Mz-EpI" id="W0o-NR-E96"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="fIE-1y-qpc" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2524.6376811594205" y="-348.21428571428572"/>
</scene>
<!--Colour Picker View-->
<scene sceneID="H2r-WV-fSr">
<objects>
<viewController storyboardIdentifier="ColourPickerView" id="xQo-mK-Kfi" customClass="ColourPickerView" customModule="AvH_Plan" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="yNW-hn-UZ1">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<navigationBar contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" layoutMarginsFollowReadableWidth="YES" translucent="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hA8-ki-X8m">
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
<items>
<navigationItem title="Title" id="HYG-gj-KYl">
<barButtonItem key="rightBarButtonItem" title="Done" id="ZI8-Ec-yYU">
<connections>
<action selector="done:" destination="xQo-mK-Kfi" id="DK7-6I-kUG"/>
</connections>
</barButtonItem>
</navigationItem>
</items>
</navigationBar>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="PuQ-HH-9DW">
<rect key="frame" x="0.0" y="88" width="414" height="774"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="U1s-L9-Ptw" customClass="MagazineLayout" customModule="MagazineLayout">
<size key="itemSize" width="50" height="50"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells/>
<connections>
<outlet property="dataSource" destination="xQo-mK-Kfi" id="xjd-1I-Q8C"/>
<outlet property="delegate" destination="xQo-mK-Kfi" id="lgT-bv-TWP"/>
</connections>
</collectionView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="PuQ-HH-9DW" firstAttribute="leading" secondItem="sxo-IA-DXC" secondAttribute="leading" id="0ss-7W-Crv"/>
<constraint firstItem="hA8-ki-X8m" firstAttribute="top" secondItem="sxo-IA-DXC" secondAttribute="top" id="cSc-da-pRP"/>
<constraint firstItem="hA8-ki-X8m" firstAttribute="trailing" secondItem="sxo-IA-DXC" secondAttribute="trailing" id="eLY-V4-1lX"/>
<constraint firstItem="sxo-IA-DXC" firstAttribute="trailing" secondItem="PuQ-HH-9DW" secondAttribute="trailing" id="iAf-Pv-Hl8"/>
<constraint firstItem="PuQ-HH-9DW" firstAttribute="top" secondItem="hA8-ki-X8m" secondAttribute="bottom" id="lNF-lt-wSq"/>
<constraint firstItem="sxo-IA-DXC" firstAttribute="bottom" secondItem="PuQ-HH-9DW" secondAttribute="bottom" id="m44-uV-U72"/>
<constraint firstItem="hA8-ki-X8m" firstAttribute="leading" secondItem="sxo-IA-DXC" secondAttribute="leading" id="vWh-ct-B5X"/>
</constraints>
<viewLayoutGuide key="safeArea" id="sxo-IA-DXC"/>
</view>
<connections>
<outlet property="collectionView" destination="PuQ-HH-9DW" id="b5u-ZB-l7g"/>
<outlet property="toolbar" destination="hA8-ki-X8m" id="wGZ-na-axJ"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="hiX-3i-iLz" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3363.7681159420295" y="-341.51785714285711"/>
</scene>
<!--Information--> <!--Information-->
<scene sceneID="tt5-VM-aeV"> <scene sceneID="tt5-VM-aeV">
<objects> <objects>
@@ -186,7 +359,7 @@
<!--AvH Plan--> <!--AvH Plan-->
<scene sceneID="yl2-sM-qoP"> <scene sceneID="yl2-sM-qoP">
<objects> <objects>
<tabBarController title="AvH Plan" id="49e-Tb-3d3" sceneMemberID="viewController"> <tabBarController title="AvH Plan" id="49e-Tb-3d3" customClass="CustomTabBarController" customModule="AvH_Plan" customModuleProvider="target" sceneMemberID="viewController">
<tabBar key="tabBar" contentMode="scaleToFill" translucent="NO" id="W28-zg-YXA"> <tabBar key="tabBar" contentMode="scaleToFill" translucent="NO" id="W28-zg-YXA">
<rect key="frame" x="0.0" y="975" width="768" height="49"/> <rect key="frame" x="0.0" y="975" width="768" height="49"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+15
View File
@@ -0,0 +1,15 @@
//
// ColourViewCell.swift
// AvH Plan
//
// Created by Deniz Duezgoeren on 21.07.19.
// Copyright © 2019 Deniz Duezgoeren. All rights reserved.
//
import UIKit
class ColourViewCell: GenericViewCell {
@IBOutlet weak var colorView: UIView!
@IBOutlet weak var label: UILabel!
}
+64
View File
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="ColourViewCell" customModule="AvH_Plan" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="437" height="71"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="437" height="71"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="190-8v-eT2">
<rect key="frame" x="71" y="8" width="342" height="55"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pXw-Js-My4">
<rect key="frame" x="16" y="70" width="405" height="1"/>
<color key="backgroundColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HcR-OC-IDt">
<rect key="frame" x="16" y="8" width="39" height="39"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" secondItem="HcR-OC-IDt" secondAttribute="height" multiplier="1:1" id="4zf-WA-ORG"/>
</constraints>
</view>
</subviews>
</view>
<constraints>
<constraint firstAttribute="leading" secondItem="HcR-OC-IDt" secondAttribute="trailing" constant="-55" id="52w-ff-fKd"/>
<constraint firstAttribute="trailing" secondItem="pXw-Js-My4" secondAttribute="trailing" constant="16" id="5Re-eN-o1T"/>
<constraint firstItem="HcR-OC-IDt" firstAttribute="top" secondItem="190-8v-eT2" secondAttribute="top" priority="999" id="8DG-j8-Ojn"/>
<constraint firstAttribute="trailing" secondItem="190-8v-eT2" secondAttribute="trailing" constant="24" id="8Uf-UV-G9Y"/>
<constraint firstAttribute="bottom" secondItem="pXw-Js-My4" secondAttribute="bottom" id="BP5-Xn-rR4"/>
<constraint firstItem="HcR-OC-IDt" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="16" id="HWa-bE-RAc"/>
<constraint firstItem="190-8v-eT2" firstAttribute="bottom" secondItem="HcR-OC-IDt" secondAttribute="bottom" priority="999" id="Qib-8w-kx3"/>
<constraint firstItem="190-8v-eT2" firstAttribute="leading" secondItem="HcR-OC-IDt" secondAttribute="trailing" constant="16" id="if6-co-5BB"/>
<constraint firstItem="190-8v-eT2" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="8" id="j5f-Jb-cBH"/>
<constraint firstAttribute="bottom" secondItem="190-8v-eT2" secondAttribute="bottom" constant="8" id="lcL-aR-dl6"/>
<constraint firstItem="pXw-Js-My4" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="16" id="nCr-5a-USw"/>
<constraint firstItem="pXw-Js-My4" firstAttribute="top" secondItem="190-8v-eT2" secondAttribute="bottom" constant="7" id="nTa-Og-B8E"/>
</constraints>
<viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
<size key="customSize" width="437" height="71"/>
<connections>
<outlet property="colorView" destination="HcR-OC-IDt" id="qB6-fL-D3e"/>
<outlet property="label" destination="190-8v-eT2" id="Xnc-ZG-PDp"/>
</connections>
<point key="canvasLocation" x="412.31884057971018" y="160.37946428571428"/>
</collectionViewCell>
</objects>
</document>
+19
View File
@@ -0,0 +1,19 @@
//
// CustomTabBarController.swift
// AvH Plan
//
// Created by Deniz Duezgoeren on 19.07.19.
// Copyright © 2019 Deniz Duezgoeren. All rights reserved.
//
import UIKit
class CustomTabBarController: UITabBarController {
let prefs = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
self.selectedIndex = prefs.integer(forKey: "default-plan")
}
}
+107
View File
@@ -0,0 +1,107 @@
//
// CustomizationViewController.swift
// AvH Plan
//
// Created by Deniz Duezgoeren on 19.07.19.
// Copyright © 2019 Deniz Duezgoeren. All rights reserved.
//
import UIKit
import MagazineLayout
class CustomizationViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateMagazineLayout {
let courses = ["German", "English", "French", "Spanish", "Latin", "Turkish", "Chinese", "Arts", "Music", "Theatre", "Geography", "History", "Politics", "Philosophy", "Religion", "Maths", "Biology", "Chemistry", "Physics", "CompSci", "PhysEd", "GLL", "WAT", "Forder", "WP"]
@IBOutlet weak var collectionView: UICollectionView!
let identifier = "customisation_cell"
// let storyboard = UIStoryboard(name: "main", bundle: nil)
let prefs = UserDefaults.standard
let df = DataFetcher.sharedInstance
@IBOutlet weak var txtName: UITextField!
@IBOutlet weak var txtClasses: UITextField!
@IBOutlet weak var txtCourses: UITextField!
@IBOutlet weak var defaultSegments: UISegmentedControl!
@IBOutlet weak var toolbar: UINavigationBar!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.collectionView.register(UINib(nibName: "ColourViewCell", bundle: nil), forCellWithReuseIdentifier: identifier)
}
@IBAction func done(_ sender: UIBarButtonItem) {
self.prefs.set(self.txtName.text, forKey: "username")
self.prefs.set(self.txtClasses.text, forKey: "classes")
self.prefs.set(self.txtCourses.text, forKey: "courses")
self.prefs.set(self.defaultSegments.selectedSegmentIndex, forKey: "default-plan")
self.prefs.synchronize()
self.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
self.txtName.text = prefs.string(forKey: "username")
self.txtClasses.text = prefs.string(forKey: "classes")
self.txtCourses.text = prefs.string(forKey: "courses")
self.defaultSegments.selectedSegmentIndex = prefs.integer(forKey: "default-plan")
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let s = storyboard?.instantiateViewController(withIdentifier: "ColourPickerView") as? ColourPickerView {
s.course = self.courses[indexPath.item]
s.internalCourse = self.courses[indexPath.item]
self.present(s, animated: true)
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeModeForItemAt indexPath: IndexPath) -> MagazineLayoutItemSizeMode {
let widthMode = MagazineLayoutItemWidthMode.fullWidth(respectsHorizontalInsets: true)
let heightMode = MagazineLayoutItemHeightMode.dynamic
return MagazineLayoutItemSizeMode(widthMode: widthMode, heightMode: heightMode)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, visibilityModeForHeaderInSectionAtIndex index: Int) -> MagazineLayoutHeaderVisibilityMode {
return .hidden
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, visibilityModeForFooterInSectionAtIndex index: Int) -> MagazineLayoutFooterVisibilityMode {
return .hidden
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, visibilityModeForBackgroundInSectionAtIndex index: Int) -> MagazineLayoutBackgroundVisibilityMode {
return .hidden
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, horizontalSpacingForItemsInSectionAtIndex index: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, verticalSpacingForElementsInSectionAtIndex index: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetsForSectionAtIndex index: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetsForItemsInSectionAtIndex index: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.courses.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath as IndexPath) as! ColourViewCell
cell.label.text = self.courses[indexPath.item]
cell.colorView.layer.cornerRadius = cell.colorView.frame.height / 2
cell.colorView.backgroundColor = self.df.getColourPalette()[prefs.integer(forKey: "debug-colour-index-\(courses[indexPath.item])")]
cell.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
return cell
}
}
+14 -6
View File
@@ -14,6 +14,8 @@ import SQLite
class DataFetcher { class DataFetcher {
static let sharedInstance = DataFetcher()
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let prefs = UserDefaults.standard let prefs = UserDefaults.standard
@@ -30,7 +32,7 @@ class DataFetcher {
let room = Expression<String>("room") let room = Expression<String>("room")
let text = Expression<String>("text") let text = Expression<String>("text")
func doAsync(do task: String, completionHandler: @escaping (_ substitutions: Array<Any>) -> ()) { func doAsync(do task: String, completionHandler: @escaping (_ substitutions: [Any]) -> ()) {
DispatchQueue(label: "work-queue").async { DispatchQueue(label: "work-queue").async {
let foodUrl = "https://djd4rkn355.github.io/food_test.html" let foodUrl = "https://djd4rkn355.github.io/food_test.html"
let url = "https://djd4rkn355.github.io/subst_test.html" let url = "https://djd4rkn355.github.io/subst_test.html"
@@ -43,16 +45,14 @@ class DataFetcher {
} }
} }
} }
} }
} }
func parseHTML(html: String, food: String, type: String) -> Array<Any> { func parseHTML(html: String, food: String, type: String) -> [Any] {
var subst = Array<SubstModel>() var subst = [SubstModel]()
var personalSubst = Array<SubstModel>() var personalSubst = [SubstModel]()
var info = "" var info = ""
var infoList = [String]() var infoList = [String]()
var menuList = [String]() var menuList = [String]()
do { do {
let doc = try SwiftSoup.parse(html) let doc = try SwiftSoup.parse(html)
@@ -273,4 +273,12 @@ class DataFetcher {
} }
return UIImage(named: imagePath) return UIImage(named: imagePath)
} }
func getColourPalette() -> [UIColor] {
return [#colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0), #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1), #colorLiteral(red: 1, green: 0.5781051517, blue: 0, alpha: 1), #colorLiteral(red: 0.9995340705, green: 0.988355577, blue: 0.4726552367, alpha: 1), #colorLiteral(red: 0.4500938654, green: 0.9813225865, blue: 0.4743030667, alpha: 1), #colorLiteral(red: 0.4508578777, green: 0.9882974029, blue: 0.8376303315, alpha: 1), #colorLiteral(red: 0.4620226622, green: 0.8382837176, blue: 1, alpha: 1), #colorLiteral(red: 0.476841867, green: 0.5048075914, blue: 1, alpha: 1), #colorLiteral(red: 0.8446564078, green: 0.5145705342, blue: 1, alpha: 1), #colorLiteral(red: 1, green: 0.5409764051, blue: 0.8473142982, alpha: 1), #colorLiteral(red: 0.6745098039, green: 0.5568627451, blue: 0.4078431373, alpha: 1), #colorLiteral(red: 0.7540688515, green: 0.7540867925, blue: 0.7540771365, alpha: 1)]
}
func getColourPaletteNames() -> [String] {
return ["White", "Red", "Orange", "Yellow", "Green", "Cyan", "Light Blue", "Blue", "Purple", "Pink", "Brown", "Grey"]
}
} }
+1 -1
View File
@@ -14,7 +14,7 @@ class InfoViewController : UIViewController {
let prefs = UserDefaults.standard let prefs = UserDefaults.standard
@IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var scrollView: UIScrollView!
private let refreshControl = UIRefreshControl() private let refreshControl = UIRefreshControl()
let df = DataFetcher() // should be a static reference let df = DataFetcher.sharedInstance
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
+2 -2
View File
@@ -13,7 +13,7 @@ class MenuViewController : UIViewController, UICollectionViewDataSource, UIColle
var items = [String]() var items = [String]()
private let refreshControl = UIRefreshControl() private let refreshControl = UIRefreshControl()
let df = DataFetcher() let df = DataFetcher.sharedInstance
@IBOutlet weak var toolbar: UINavigationBar! @IBOutlet weak var toolbar: UINavigationBar!
let layout = MagazineLayout() let layout = MagazineLayout()
var collectionView: UICollectionView var collectionView: UICollectionView
@@ -71,7 +71,7 @@ class MenuViewController : UIViewController, UICollectionViewDataSource, UIColle
cell.content.text = self.items[indexPath.item] cell.content.text = self.items[indexPath.item]
} }
cell.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) cell.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
return cell return cell
} }
+22 -20
View File
@@ -14,28 +14,30 @@ class PersonalPlanViewController: PlanViewController {
let prefs = UserDefaults.standard let prefs = UserDefaults.standard
@IBAction func toolbarButtonCustomise(_ sender: UIBarButtonItem) { @IBAction func toolbarButtonCustomise(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: NSLocalizedString("customize_alert_title", comment: ""), message: nil, preferredStyle: .alert) // let alert = UIAlertController(title: NSLocalizedString("customize_alert_title", comment: ""), message: nil, preferredStyle: .alert)
alert.addTextField { (name) in // alert.addTextField { (name) in
name.text = self.prefs.string(forKey: "username") // name.text = self.prefs.string(forKey: "username")
name.placeholder = NSLocalizedString("name", comment: "") // name.placeholder = NSLocalizedString("name", comment: "")
// }
// alert.addTextField { (classes) in
// classes.text = self.prefs.string(forKey: "classes")
// classes.placeholder = NSLocalizedString("classes", comment: "")
// }
// alert.addTextField { (courses) in
// courses.text = self.prefs.string(forKey: "courses")
// courses.placeholder = NSLocalizedString("courses", comment: "")
// }
// alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (action) -> Void in
// _ = self.prefs.set(alert!.textFields![0].text, forKey: "username")
// _ = self.prefs.set(alert!.textFields![1].text, forKey: "classes")
// _ = self.prefs.set(alert!.textFields![2].text, forKey: "courses")
// _ = self.prefs.synchronize()
// }))
//
// self.present(alert, animated: true, completion: nil)
} }
alert.addTextField { (classes) in
classes.text = self.prefs.string(forKey: "classes")
classes.placeholder = NSLocalizedString("classes", comment: "")
}
alert.addTextField { (courses) in
courses.text = self.prefs.string(forKey: "courses")
courses.placeholder = NSLocalizedString("courses", comment: "")
}
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (action) -> Void in
_ = self.prefs.set(alert!.textFields![0].text, forKey: "username")
_ = self.prefs.set(alert!.textFields![1].text, forKey: "classes")
_ = self.prefs.set(alert!.textFields![2].text, forKey: "courses")
_ = self.prefs.synchronize()
}))
self.present(alert, animated: true, completion: nil)
}
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
+1 -75
View File
@@ -7,9 +7,8 @@
// //
import UIKit import UIKit
import MagazineLayout
class PlanViewCell: MagazineLayoutCollectionViewCell { class PlanViewCell: GenericViewCell {
@IBOutlet weak var group: UILabel! @IBOutlet weak var group: UILabel!
@IBOutlet weak var date: UILabel! @IBOutlet weak var date: UILabel!
@@ -18,77 +17,4 @@ class PlanViewCell: MagazineLayoutCollectionViewCell {
@IBOutlet weak var additional: UILabel! @IBOutlet weak var additional: UILabel!
@IBOutlet weak var room: UILabel! @IBOutlet weak var room: UILabel!
@IBOutlet weak var tintView: UIView! @IBOutlet weak var tintView: UIView!
private var widthConstraint: NSLayoutConstraint!
public override init(frame: CGRect) {
super.init(frame: frame)
contentView.translatesAutoresizingMaskIntoConstraints = false
let bottomConstraint = bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
bottomConstraint.priority = .required - 1
NSLayoutConstraint.activate(
[
leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
topAnchor.constraint(equalTo: contentView.topAnchor),
bottomConstraint
]
)
widthConstraint = widthAnchor.constraint(equalToConstant: bounds.width)
widthConstraint.priority = .required - 1
widthConstraint.isActive = true
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override open func awakeFromNib() {
super.awakeFromNib()
contentView.translatesAutoresizingMaskIntoConstraints = false
let bottomConstraint = bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
bottomConstraint.priority = .required - 1
NSLayoutConstraint.activate(
[
leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
topAnchor.constraint(equalTo: contentView.topAnchor),
bottomConstraint
]
)
widthConstraint = widthAnchor.constraint(equalToConstant: bounds.width)
widthConstraint.priority = .required - 1
widthConstraint.isActive = true
}
override open func preferredLayoutAttributesFitting(
_ layoutAttributes: UICollectionViewLayoutAttributes)
-> UICollectionViewLayoutAttributes
{
guard let attributes = layoutAttributes as? MagazineLayoutCollectionViewLayoutAttributes else {
assertionFailure("`layoutAttributes` must be an instance of `MagazineLayoutCollectionViewLayoutAttributes`")
return super.preferredLayoutAttributesFitting(layoutAttributes)
}
let size: CGSize
if attributes.shouldVerticallySelfSize {
widthConstraint.constant = layoutAttributes.size.width
size = super.preferredLayoutAttributesFitting(layoutAttributes).size
} else {
// No self-sizing is required; respect whatever size the layout determined.
size = layoutAttributes.size
}
layoutAttributes.size = size
return layoutAttributes
}
} }
+1 -1
View File
@@ -14,7 +14,7 @@ class PlanViewController : UIViewController, UICollectionViewDataSource, UIColle
let identifier = "plan_cell" let identifier = "plan_cell"
var substs = [SubstModel]() var substs = [SubstModel]()
let refreshControl = UIRefreshControl() let refreshControl = UIRefreshControl()
let df = DataFetcher() let df = DataFetcher.sharedInstance
let layout = MagazineLayout() let layout = MagazineLayout()
var collectionView: UICollectionView var collectionView: UICollectionView
+1 -5
View File
@@ -1,6 +1,5 @@
PODS: PODS:
- Alamofire (4.8.2) - Alamofire (4.8.2)
- Kanna (5.0.0)
- MagazineLayout (1.5.0) - MagazineLayout (1.5.0)
- SQLite.swift (0.12.2): - SQLite.swift (0.12.2):
- SQLite.swift/standard (= 0.12.2) - SQLite.swift/standard (= 0.12.2)
@@ -9,7 +8,6 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- Alamofire - Alamofire
- Kanna
- MagazineLayout - MagazineLayout
- SQLite.swift - SQLite.swift
- SwiftSoup - SwiftSoup
@@ -17,18 +15,16 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
https://github.com/cocoapods/specs.git: https://github.com/cocoapods/specs.git:
- Alamofire - Alamofire
- Kanna
- MagazineLayout - MagazineLayout
- SQLite.swift - SQLite.swift
- SwiftSoup - SwiftSoup
SPEC CHECKSUMS: SPEC CHECKSUMS:
Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3 Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3
Kanna: a32875df62975f8f4b871e933b4ea1a5c3b8be0f
MagazineLayout: fe41dc2cf1923e3bf377cd8d906a4455a0bf9c83 MagazineLayout: fe41dc2cf1923e3bf377cd8d906a4455a0bf9c83
SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3
SwiftSoup: 92f5b348c131aed8af04f4326db1579ab19fa08c SwiftSoup: 92f5b348c131aed8af04f4326db1579ab19fa08c
PODFILE CHECKSUM: 800b015f8a9a586793f8789b635602ca3c1941e7 PODFILE CHECKSUM: 193891d247791f0b53f0dc2ae08ce321f2c24c0d
COCOAPODS: 1.6.1 COCOAPODS: 1.6.1
+1 -5
View File
@@ -1,6 +1,5 @@
PODS: PODS:
- Alamofire (4.8.2) - Alamofire (4.8.2)
- Kanna (5.0.0)
- MagazineLayout (1.5.0) - MagazineLayout (1.5.0)
- SQLite.swift (0.12.2): - SQLite.swift (0.12.2):
- SQLite.swift/standard (= 0.12.2) - SQLite.swift/standard (= 0.12.2)
@@ -9,7 +8,6 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- Alamofire - Alamofire
- Kanna
- MagazineLayout - MagazineLayout
- SQLite.swift - SQLite.swift
- SwiftSoup - SwiftSoup
@@ -17,18 +15,16 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
https://github.com/cocoapods/specs.git: https://github.com/cocoapods/specs.git:
- Alamofire - Alamofire
- Kanna
- MagazineLayout - MagazineLayout
- SQLite.swift - SQLite.swift
- SwiftSoup - SwiftSoup
SPEC CHECKSUMS: SPEC CHECKSUMS:
Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3 Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3
Kanna: a32875df62975f8f4b871e933b4ea1a5c3b8be0f
MagazineLayout: fe41dc2cf1923e3bf377cd8d906a4455a0bf9c83 MagazineLayout: fe41dc2cf1923e3bf377cd8d906a4455a0bf9c83
SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3
SwiftSoup: 92f5b348c131aed8af04f4326db1579ab19fa08c SwiftSoup: 92f5b348c131aed8af04f4326db1579ab19fa08c
PODFILE CHECKSUM: 800b015f8a9a586793f8789b635602ca3c1941e7 PODFILE CHECKSUM: 193891d247791f0b53f0dc2ae08ce321f2c24c0d
COCOAPODS: 1.6.1 COCOAPODS: 1.6.1
+814 -1021
View File
File diff suppressed because it is too large Load Diff
@@ -14,7 +14,7 @@
buildForAnalyzing = "YES"> buildForAnalyzing = "YES">
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "A3659275593D1A051A41F7ACAF1CEBF6" BlueprintIdentifier = "FBCC9250CC2F3CD2F4F7861DAE38E61D"
BuildableName = "Pods_AvH_Plan.framework" BuildableName = "Pods_AvH_Plan.framework"
BlueprintName = "Pods-AvH Plan" BlueprintName = "Pods-AvH Plan"
ReferencedContainer = "container:Pods.xcodeproj"> ReferencedContainer = "container:Pods.xcodeproj">
@@ -45,7 +45,7 @@
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "A3659275593D1A051A41F7ACAF1CEBF6" BlueprintIdentifier = "FBCC9250CC2F3CD2F4F7861DAE38E61D"
BuildableName = "Pods_AvH_Plan.framework" BuildableName = "Pods_AvH_Plan.framework"
BlueprintName = "Pods-AvH Plan" BlueprintName = "Pods-AvH Plan"
ReferencedContainer = "container:Pods.xcodeproj"> ReferencedContainer = "container:Pods.xcodeproj">
@@ -14,7 +14,7 @@
buildForArchiving = "YES"> buildForArchiving = "YES">
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "CC36B519DC0BE1511623F9A1B41B6F96" BlueprintIdentifier = "401664DA96804F2306813DC441D08F45"
BuildableName = "SwiftSoup.framework" BuildableName = "SwiftSoup.framework"
BlueprintName = "SwiftSoup" BlueprintName = "SwiftSoup"
ReferencedContainer = "container:Pods.xcodeproj"> ReferencedContainer = "container:Pods.xcodeproj">
@@ -8,57 +8,36 @@
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>Kanna.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>1</integer>
</dict> </dict>
<key>MagazineLayout.xcscheme</key> <key>MagazineLayout.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>2</integer>
</dict> </dict>
<key>Pods-AvH Plan.xcscheme</key> <key>Pods-AvH Plan.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>3</integer>
</dict> </dict>
<key>Pods-AvH PlanTests.xcscheme</key> <key>Pods-AvH PlanTests.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>4</integer>
</dict> </dict>
<key>Pods-AvH PlanUITests.xcscheme</key> <key>Pods-AvH PlanUITests.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>5</integer>
</dict> </dict>
<key>SQLite.swift.xcscheme</key> <key>SQLite.swift.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>6</integer>
</dict> </dict>
<key>SwiftSoup.xcscheme</key> <key>SwiftSoup.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key>
<integer>7</integer>
</dict> </dict>
</dict> </dict>
<key>SuppressBuildableAutocreation</key> <key>SuppressBuildableAutocreation</key>
@@ -24,30 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
## Kanna
The MIT License (MIT)
Copyright (c) 2014 - 2015 Atsushi Kiwaki (@_tid_)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
## MagazineLayout ## MagazineLayout
Apache License Apache License
@@ -41,36 +41,6 @@ THE SOFTWARE.
<key>Type</key> <key>Type</key>
<string>PSGroupSpecifier</string> <string>PSGroupSpecifier</string>
</dict> </dict>
<dict>
<key>FooterText</key>
<string>The MIT License (MIT)
Copyright (c) 2014 - 2015 Atsushi Kiwaki (@_tid_)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.</string>
<key>License</key>
<string>MIT</string>
<key>Title</key>
<string>Kanna</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string> Apache License <string> Apache License
@@ -154,14 +154,12 @@ strip_invalid_archs() {
if [[ "$CONFIGURATION" == "Debug" ]]; then if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/Kanna/Kanna.framework"
install_framework "${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework" install_framework "${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework" install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
install_framework "${BUILT_PRODUCTS_DIR}/Kanna/Kanna.framework"
install_framework "${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework" install_framework "${BUILT_PRODUCTS_DIR}/MagazineLayout/MagazineLayout.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework" install_framework "${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework"