├── .github └── _workflows │ └── main.yml ├── .gitignore ├── .travis.yml ├── Assets ├── Documentation │ ├── folder.jpg │ ├── navigation.png │ ├── registration.png │ ├── superarc.pdf │ ├── superarc.png │ └── xcodeproj.jpg ├── Graphics │ ├── SCS.png │ ├── SCS.sketch │ ├── SCS2.png │ └── SCS3.png ├── screenshot1.png ├── screenshot2.png ├── screenshot3.png └── screenshot4.png ├── Cartfile ├── Cartfile.resolved ├── CodeCoverageDangerfile.swift ├── Dangerfile.swift ├── Gemfile ├── LICENSE ├── Package.resolved ├── Package.swift ├── README.md ├── Sources └── DangerDependencies │ └── Fake.swift ├── SuperArc ├── Example │ ├── ExampleApp │ │ ├── ExampleApp.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── ExampleApp.xcscheme │ │ ├── Sources │ │ │ ├── Base │ │ │ │ └── Router │ │ │ │ │ ├── ComponentsRouter+Dependencies.swift │ │ │ │ │ └── ComponentsRouter+Interfaces.swift │ │ │ ├── Resources │ │ │ │ ├── Assets.xcassets │ │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ └── Base.lproj │ │ │ │ │ └── LaunchScreen.storyboard │ │ │ ├── Scenes │ │ │ │ ├── Dashboard │ │ │ │ │ ├── Dashboard.storyboard │ │ │ │ │ ├── DashboardComponent.swift │ │ │ │ │ └── DashboardViewController.swift │ │ │ │ ├── FeatureA │ │ │ │ │ ├── FeatureA.storyboard │ │ │ │ │ ├── FeatureAComponent.swift │ │ │ │ │ └── FeatureAViewController.swift │ │ │ │ ├── FeatureB │ │ │ │ │ ├── FeatureB.storyboard │ │ │ │ │ ├── FeatureBComponent.swift │ │ │ │ │ └── FeatureBViewController.swift │ │ │ │ ├── FeatureC │ │ │ │ │ ├── FeatureC.storyboard │ │ │ │ │ ├── FeatureCComponent.swift │ │ │ │ │ └── FeatureCViewController.swift │ │ │ │ └── FeatureD │ │ │ │ │ ├── FeatureD.storyboard │ │ │ │ │ ├── FeatureDComponent.swift │ │ │ │ │ └── FeatureDViewController.swift │ │ │ └── Top │ │ │ │ ├── AppDelegate.swift │ │ │ │ └── Info.plist │ │ ├── UITests │ │ │ ├── ExampleAppUITests.swift │ │ │ └── Info.plist │ │ └── UnitTests │ │ │ ├── ExampleAppTests.swift │ │ │ └── Info.plist │ └── ExampleAppRouter │ │ ├── ExampleAppRouter.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ExampleAppRouter.xcscheme │ │ ├── FeatureA │ │ ├── FeatureA.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── FeatureA.xcscheme │ │ ├── Sources │ │ │ ├── Base │ │ │ │ └── Components │ │ │ │ │ ├── FeatureA.storyboard │ │ │ │ │ ├── FeatureAComponent.swift │ │ │ │ │ └── FeatureAViewController.swift │ │ │ └── Top │ │ │ │ ├── FeatureA.h │ │ │ │ └── Info.plist │ │ └── Tests │ │ │ ├── FeatureATests.swift │ │ │ └── Info.plist │ │ ├── FeatureB │ │ ├── FeatureB.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── FeatureB.xcscheme │ │ ├── FeatureBTests │ │ │ ├── FeatureBTests.swift │ │ │ └── Info.plist │ │ └── Sources │ │ │ ├── Base │ │ │ └── Components │ │ │ │ ├── FeatureB.storyboard │ │ │ │ ├── FeatureBComponent.swift │ │ │ │ └── FeatureBViewController.swift │ │ │ └── Top │ │ │ ├── FeatureB.h │ │ │ └── Info.plist │ │ ├── Sources │ │ ├── Base │ │ │ └── Router │ │ │ │ ├── ComponentsRouter+Dependencies.swift │ │ │ │ ├── ComponentsRouter+FeatureA.swift │ │ │ │ ├── ComponentsRouter+FeatureB.swift │ │ │ │ ├── ComponentsRouter+Interfaces.swift │ │ │ │ └── ComponentsRouter+Routers.swift │ │ ├── Resources │ │ │ ├── Assets.xcassets │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ └── Base.lproj │ │ │ │ └── LaunchScreen.storyboard │ │ ├── Scenes │ │ │ ├── Dashboard │ │ │ │ ├── Dashboard.storyboard │ │ │ │ ├── DashboardComponent.swift │ │ │ │ └── DashboardViewController.swift │ │ │ ├── FeatureC │ │ │ │ ├── FeatureC.storyboard │ │ │ │ ├── FeatureCComponent.swift │ │ │ │ └── FeatureCViewController.swift │ │ │ └── FeatureD │ │ │ │ ├── FeatureD.storyboard │ │ │ │ ├── FeatureDComponent.swift │ │ │ │ └── FeatureDViewController.swift │ │ └── Top │ │ │ ├── AppDelegate.swift │ │ │ └── Info.plist │ │ ├── UITests │ │ └── Info.plist │ │ └── UnitTests │ │ └── Info.plist ├── SuperArcActivityIndicator │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── Activity+Rx.swift │ │ │ ├── Activity.swift │ │ │ ├── ActivityPresenter.swift │ │ │ ├── ActivitySink.swift │ │ │ ├── ActivityView │ │ │ │ ├── ActivityView.swift │ │ │ │ ├── ActivityView.xib │ │ │ │ └── ActivityViewStyle.swift │ │ │ └── ViewController+ActivitySink.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcActivityIndicator.h │ ├── SuperArcActivityIndicator.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Tests │ │ └── Info.plist ├── SuperArcCoordinator │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ └── BaseCoordinator.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcCoordinator.h │ ├── SuperArcCoordinator.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ ├── Info.plist │ │ └── SuperArcCoordinatorTests.swift ├── SuperArcCore │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Engine │ │ │ ├── DomainLogic │ │ │ │ ├── Model │ │ │ │ │ └── Model.swift │ │ │ │ └── Service │ │ │ │ │ ├── Service.swift │ │ │ │ │ ├── ServiceContext.swift │ │ │ │ │ └── ServiceRegistry.swift │ │ │ └── Engine.swift │ │ ├── Top │ │ │ ├── Core.swift │ │ │ ├── Info.plist │ │ │ └── SuperArcCore.h │ │ └── UI │ │ │ ├── ApplicationContext.swift │ │ │ ├── ApplicationDependency.swift │ │ │ └── ApplicationDependencyRegistry.swift │ ├── SuperArcCore.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcCoreComponent │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── Dependency.swift │ │ │ ├── Interface │ │ │ │ └── Interface.swift │ │ │ ├── Navigation │ │ │ │ ├── ComponentPresentable.swift │ │ │ │ ├── ComponentRoute.swift │ │ │ │ ├── ComponentRouter.swift │ │ │ │ └── NavigatorProtocol.swift │ │ │ ├── ReferenceWrapper │ │ │ │ └── ReferenceWrapper.swift │ │ │ ├── ViewBuilder.swift │ │ │ └── ViewController │ │ │ │ └── ViewControllerRoutable.swift │ │ └── Top │ │ │ ├── CommonViewController+ComponentsRouter.swift │ │ │ ├── Component.swift │ │ │ ├── DependencyProvider.swift │ │ │ ├── Info.plist │ │ │ ├── Navigator.swift │ │ │ └── SuperArcCoreComponent.h │ ├── SuperArcCoreComponent.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcCoreUI │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── View │ │ │ │ └── View.swift │ │ │ ├── ViewController │ │ │ │ ├── CollectionViewController.swift │ │ │ │ ├── CommonViewController.swift │ │ │ │ ├── NavigationController.swift │ │ │ │ ├── PageViewController.swift │ │ │ │ ├── TabBarController.swift │ │ │ │ ├── TableViewController.swift │ │ │ │ ├── UIViewController+Extensions.swift │ │ │ │ └── ViewController.swift │ │ │ └── ViewModel │ │ │ │ ├── ViewModel.swift │ │ │ │ └── ViewModelBindable.swift │ │ ├── Runtime │ │ │ ├── Extensions │ │ │ │ ├── UICollectionView+Extensions.swift │ │ │ │ ├── UIColor+Extensions.swift │ │ │ │ ├── UIImage+Extensions.swift │ │ │ │ ├── UITableView+Extensions.swift │ │ │ │ └── UIView+Extensions.swift │ │ │ └── StoryboardInitiable.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcCoreUI.h │ ├── SuperArcCoreUI.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── SuperArcCoreUI.xcscheme │ └── Tests │ │ └── Info.plist ├── SuperArcFoundation │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Configuration │ │ │ ├── Configuration.swift │ │ │ ├── ConfigurationRegistry.swift │ │ │ └── Endpoint.swift │ │ ├── Container │ │ │ ├── Container.swift │ │ │ └── Registry.swift │ │ ├── Continuation │ │ │ └── Continuation.swift │ │ ├── Promises │ │ │ └── Promise+Extensions.swift │ │ ├── Runtime │ │ │ ├── ClassNameDerivable.swift │ │ │ ├── Comparable+Extensions.swift │ │ │ ├── Date+Extensions.swift │ │ │ ├── Dictionary+Extensions.swift │ │ │ ├── DispatchQueue+Extension.swift │ │ │ ├── Int+Extensions.swift │ │ │ ├── NSObject+Extensions.swift │ │ │ └── String+Extensions.swift │ │ └── SupportingFiles │ │ │ ├── Info.plist │ │ │ └── SuperArcFoundation.h │ ├── SuperArcFoundation.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcLocalization │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── Runtime │ │ │ │ └── String+Localization.swift │ │ │ └── UI │ │ │ │ ├── UILabel+Localization.swift │ │ │ │ ├── UITabBarItem+Localization.swift │ │ │ │ └── UIViewController+Localization.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcLocalization.h │ ├── SuperArcLocalization.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcModelManager │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── SupportingFiles │ │ │ ├── Info.plist │ │ │ └── SuperArcModelManager.h │ │ └── Top │ │ │ ├── DataSource.swift │ │ │ ├── Model.swift │ │ │ └── ModelManager.swift │ ├── SuperArcModelManager.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcNetwork │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── Channel.swift │ │ │ ├── HTTPJSONChannel.swift │ │ │ ├── HTTPMethod.swift │ │ │ ├── NetworkError.swift │ │ │ ├── RequestResponse.swift │ │ │ ├── Server.swift │ │ │ └── ServerConfiguration.swift │ │ ├── SupportingFiles │ │ │ ├── Info.plist │ │ │ └── SuperArcNetwork.h │ │ └── Top │ │ │ └── DirectAccessJSONServer.swift │ ├── SuperArcNetwork.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcNotificationBanner │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── Notification+Rx.swift │ │ │ ├── Notification.swift │ │ │ ├── NotificationPresenter.swift │ │ │ ├── NotificationSink.swift │ │ │ └── ViewController+NotificationSink.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcNotificationBanner.h │ ├── SuperArcNotificationBanner.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcStateView │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── StateView.swift │ │ │ ├── StateView.xib │ │ │ ├── StateViewContext.swift │ │ │ ├── StateViewPresentable+Rx.swift │ │ │ ├── StateViewPresentable+ViewControllers.swift │ │ │ └── StateViewPresentable.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ └── SuperArcStateView.h │ ├── SuperArcStateView.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ └── Info.plist ├── SuperArcStore │ ├── .gitignore │ ├── README.md │ ├── Sources │ │ ├── Base │ │ │ ├── AsyncStoreProtocol.swift │ │ │ ├── StoreProtocol.swift │ │ │ └── StoreValue.swift │ │ ├── SupportingFiles │ │ │ ├── Info.plist │ │ │ └── SuperArcStore.h │ │ └── Top │ │ │ ├── AsyncStore.swift │ │ │ ├── FilesystemStore.swift │ │ │ └── MemoryStore.swift │ ├── SuperArcStore.xcodeproj │ │ └── project.pbxproj │ └── Tests │ │ ├── AsyncStoreTests.swift │ │ ├── Info.plist │ │ └── StoreTests.swift └── SuperArcTaskCoordinator │ ├── .gitignore │ ├── README.md │ ├── Sources │ ├── SupportingFiles │ │ ├── Info.plist │ │ └── SuperArcTaskCoordinator.h │ └── Top │ │ ├── ResultMonitor.swift │ │ ├── TaskQueue+Promise.swift │ │ └── TaskQueue.swift │ ├── SuperArcTaskCoordinator.xcodeproj │ └── project.pbxproj │ └── Tests │ ├── Info.plist │ ├── ResultMonitorTests.swift │ └── TaskQueueTests.swift ├── SwiftCommunity.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── SwiftCommunity ├── Core │ ├── .gitignore │ ├── Core.xcodeproj │ │ └── project.pbxproj │ ├── Sources │ │ ├── Base │ │ │ ├── Dependencies │ │ │ │ ├── AuthorsDependency.swift │ │ │ │ ├── ConferencesDependency.swift │ │ │ │ └── VideosDependency.swift │ │ │ ├── Engine │ │ │ │ ├── Configurations │ │ │ │ │ └── GitServiceConfigurationProtocol.swift │ │ │ │ ├── Domain │ │ │ │ │ └── Services │ │ │ │ │ │ ├── AuthorsServiceProtocol.swift │ │ │ │ │ │ ├── ConferencesServiceProtocol.swift │ │ │ │ │ │ ├── ContentDataProvider.swift │ │ │ │ │ │ ├── Git │ │ │ │ │ │ ├── BaseGitService.swift │ │ │ │ │ │ ├── ConferencesGitService.swift │ │ │ │ │ │ └── FilePathProvider.swift │ │ │ │ │ │ └── VideosServiceProtocol.swift │ │ │ │ └── Platform │ │ │ │ │ └── Services │ │ │ │ │ └── FilesystemContentProvider.swift │ │ │ ├── Navigation │ │ │ │ └── ComponentPresentableWrapper.swift │ │ │ └── ViewModel │ │ │ │ └── CoordinatedDIViewModel.swift │ │ ├── Resources │ │ │ └── Assets.xcassets │ │ │ │ └── Contents.json │ │ └── Top │ │ │ ├── Core.h │ │ │ └── Info.plist │ └── Tests │ │ └── Info.plist ├── CoreUX │ ├── CoreUX.xcodeproj │ │ └── project.pbxproj │ ├── Sources │ │ ├── Base │ │ │ ├── View │ │ │ │ ├── Authors │ │ │ │ │ ├── AuthorView │ │ │ │ │ │ ├── AuthorView.swift │ │ │ │ │ │ ├── AuthorView.xib │ │ │ │ │ │ └── AuthorViewModel.swift │ │ │ │ │ └── Cells │ │ │ │ │ │ ├── AuthorsCollectionViewCell.swift │ │ │ │ │ │ ├── AuthorsCollectionViewCell.xib │ │ │ │ │ │ └── AuthorsCollectionViewFlowLayout.swift │ │ │ │ └── Videos │ │ │ │ │ ├── Cell │ │ │ │ │ ├── VideosCollectionViewCell.swift │ │ │ │ │ ├── VideosCollectionViewCell.xib │ │ │ │ │ ├── VideosCollectionViewFlowLayout.swift │ │ │ │ │ ├── VideosTableViewCell.swift │ │ │ │ │ └── VideosTableViewCell.xib │ │ │ │ │ └── VideoView │ │ │ │ │ ├── VideoView.swift │ │ │ │ │ ├── VideoView.xib │ │ │ │ │ └── VideoViewModel.swift │ │ │ └── ViewController │ │ │ │ └── Markdown │ │ │ │ ├── MarkdownViewController.swift │ │ │ │ └── MarkdownViewModel.swift │ │ ├── Resources │ │ │ └── Assets.xcassets │ │ │ │ ├── Contents.json │ │ │ │ ├── author_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── author_default.png │ │ │ │ └── video_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── video_default.png │ │ └── Top │ │ │ ├── CoreUI.h │ │ │ └── Info.plist │ └── Tests │ │ └── Info.plist ├── DataModel │ ├── .gitignore │ ├── DataModels.xcodeproj │ │ └── project.pbxproj │ ├── Package.swift │ └── Sources │ │ ├── Base │ │ └── Models │ │ │ ├── Author.swift │ │ │ ├── Conference.swift │ │ │ ├── ModelCodingError.swift │ │ │ └── Video.swift │ │ └── Top │ │ ├── Info.plist │ │ └── SwiftVideosDataModel.h ├── Features │ ├── Algorithm │ │ ├── Algorithm.xcodeproj │ │ │ └── project.pbxproj │ │ ├── Sources │ │ │ ├── Base │ │ │ │ ├── Engine │ │ │ │ │ ├── DataModels │ │ │ │ │ │ └── Section.swift │ │ │ │ │ ├── DomainLogic │ │ │ │ │ │ └── AlgorithmService.swift │ │ │ │ │ └── Platform │ │ │ │ │ │ └── MarkdownProcessor │ │ │ │ │ │ └── MarkdownProcessor.swift │ │ │ │ └── UI │ │ │ │ │ └── Scenes │ │ │ │ │ ├── Content.storyboard │ │ │ │ │ └── Content │ │ │ │ │ ├── View │ │ │ │ │ ├── MarkdownContentTableViewCell.swift │ │ │ │ │ └── SectionTableViewCell.swift │ │ │ │ │ ├── ViewController │ │ │ │ │ └── ContentTableViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ ├── ContentTableViewModel.swift │ │ │ │ │ ├── ContentViewModel.swift │ │ │ │ │ └── Models+RxDataSources.swift │ │ │ ├── SupportingFiles │ │ │ │ ├── Algorithm.h │ │ │ │ └── Info.plist │ │ │ └── Top │ │ │ │ ├── AlgorithmComponent.swift │ │ │ │ └── AlgorithmDependency.swift │ │ └── Tests │ │ │ └── Info.plist │ ├── Authors │ │ ├── Authors.xcodeproj │ │ │ └── project.pbxproj │ │ ├── Sources │ │ │ ├── Base │ │ │ │ ├── Engine │ │ │ │ │ ├── DomainLogic │ │ │ │ │ │ └── AuthorsService.swift │ │ │ │ │ └── Platform │ │ │ │ │ │ └── FilesystemAuthorsContentProvider.swift │ │ │ │ └── UI │ │ │ │ │ ├── Components │ │ │ │ │ ├── Authors.storyboard │ │ │ │ │ ├── Detail │ │ │ │ │ │ ├── View │ │ │ │ │ │ │ ├── AuthorAvatarTableViewCell.swift │ │ │ │ │ │ │ └── AuthorResourcesTableViewCell.swift │ │ │ │ │ │ ├── ViewController │ │ │ │ │ │ │ └── AuthorDetailViewController.swift │ │ │ │ │ │ └── ViewModel │ │ │ │ │ │ │ └── AuthorDetailViewModel.swift │ │ │ │ │ └── List │ │ │ │ │ │ ├── ViewController │ │ │ │ │ │ └── AuthorsCollectionViewController.swift │ │ │ │ │ │ └── ViewModel │ │ │ │ │ │ └── AuthorsCollectionViewModel.swift │ │ │ │ │ └── Navigation │ │ │ │ │ └── AuthorsInterfaceProtocol.swift │ │ │ ├── Resources │ │ │ │ └── Assets.xcassets │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── author_default.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── author_default.png │ │ │ └── Top │ │ │ │ ├── Authors.h │ │ │ │ ├── AuthorsComponent.swift │ │ │ │ ├── AuthorsCoordinator.swift │ │ │ │ └── Info.plist │ │ └── Tests │ │ │ └── Info.plist │ ├── Conferences │ │ ├── Conferences.xcodeproj │ │ │ └── project.pbxproj │ │ ├── Sources │ │ │ ├── Base │ │ │ │ ├── Engine │ │ │ │ │ ├── DomainLogic │ │ │ │ │ │ └── ConferencesService.swift │ │ │ │ │ └── Platform │ │ │ │ │ │ └── FilesystemConferencesContentProvider.swift │ │ │ │ └── UI │ │ │ │ │ ├── Base │ │ │ │ │ └── ConferenceView │ │ │ │ │ │ ├── ConferenceView.swift │ │ │ │ │ │ ├── ConferenceView.xib │ │ │ │ │ │ └── ConferenceViewModel.swift │ │ │ │ │ └── Components │ │ │ │ │ ├── Conferences.storyboard │ │ │ │ │ ├── Detail │ │ │ │ │ ├── View │ │ │ │ │ │ ├── ConferenceDetailCollectionViewFlowLayout.swift │ │ │ │ │ │ └── SectionHeader │ │ │ │ │ │ │ ├── ConferenceDetailSectionHeaderView.swift │ │ │ │ │ │ │ └── ConferenceDetailSectionHeaderView.xib │ │ │ │ │ ├── ViewController │ │ │ │ │ │ └── ConferenceDetailViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ │ ├── ConferenceDetailViewModel.swift │ │ │ │ │ │ └── Models+RxDataSources.swift │ │ │ │ │ └── List │ │ │ │ │ ├── Animator │ │ │ │ │ ├── ConferenceTransition.swift │ │ │ │ │ ├── DismissAnimator.swift │ │ │ │ │ └── PresentAnimator.swift │ │ │ │ │ ├── View │ │ │ │ │ ├── ConferenceCollectionViewCell.swift │ │ │ │ │ ├── ConferenceCollectionViewCell.xib │ │ │ │ │ └── ConferenceCollectionViewFlowLayout.swift │ │ │ │ │ ├── ViewController │ │ │ │ │ └── ConferencesCollectionViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ └── ConferencesCollectionViewModel.swift │ │ │ ├── Resources │ │ │ │ └── Assets.xcassets │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── video_default.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── video_default.png │ │ │ ├── Supporting Files │ │ │ │ ├── Conferences.h │ │ │ │ └── Info.plist │ │ │ └── Top │ │ │ │ ├── ConferencesComponent.swift │ │ │ │ └── ConferencesCoordinator.swift │ │ └── Tests │ │ │ └── Info.plist │ └── Videos │ │ ├── Sources │ │ ├── Base │ │ │ ├── Engine │ │ │ │ ├── DomainLogic │ │ │ │ │ └── VideosService.swift │ │ │ │ └── Platform │ │ │ │ │ └── FilesystemVideosContentProvider.swift │ │ │ └── UI │ │ │ │ ├── Components │ │ │ │ ├── Detail │ │ │ │ │ ├── ViewController │ │ │ │ │ │ └── VideoDetailViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ │ └── VideoDetailViewModel.swift │ │ │ │ ├── List │ │ │ │ │ ├── ViewController │ │ │ │ │ │ └── VideoCollectionViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ │ └── VideosCollectionViewModel.swift │ │ │ │ └── Videos.storyboard │ │ │ │ └── Navigation │ │ │ │ └── VideosInterfaceProtocol.swift │ │ └── Top │ │ │ ├── Info.plist │ │ │ ├── Videos.h │ │ │ ├── VideosComponent.swift │ │ │ └── VideosCoordinator.swift │ │ ├── Tests │ │ └── Info.plist │ │ └── Videos.xcodeproj │ │ └── project.pbxproj └── SwiftCommunity │ ├── .gitignore │ ├── Package.swift │ ├── Sources │ ├── Application │ │ ├── Base │ │ │ ├── Constants.swift │ │ │ ├── Engine │ │ │ │ ├── Configuration │ │ │ │ │ ├── ConfigurationRegistry.swift │ │ │ │ │ ├── Endpoint+Extensions.swift │ │ │ │ │ ├── GitRepositoryConfiguration.swift │ │ │ │ │ └── JSONServerConfiguration.swift │ │ │ │ └── DataAccess │ │ │ │ │ └── OpenConferences │ │ │ │ │ ├── Data │ │ │ │ │ └── OpenConference.swift │ │ │ │ │ └── Interface │ │ │ │ │ └── OpenConferenceIterface.swift │ │ │ └── UI │ │ │ │ ├── Animation │ │ │ │ └── Animation+Fade.swift │ │ │ │ └── Transition │ │ │ │ └── Transition+Extensions.swift │ │ ├── Scenes │ │ │ ├── Dashboard │ │ │ │ ├── DashboardComponent.swift │ │ │ │ └── DashboardCoordinator.swift │ │ │ ├── More │ │ │ │ ├── About │ │ │ │ │ └── ViewController │ │ │ │ │ │ └── AboutViewController.swift │ │ │ │ ├── Licenses │ │ │ │ │ └── ViewController │ │ │ │ │ │ └── LicensesViewController.swift │ │ │ │ ├── List │ │ │ │ │ ├── ViewController │ │ │ │ │ │ └── MoreTableViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ │ └── MoreViewModel.swift │ │ │ │ ├── More.storyboard │ │ │ │ ├── MoreComponent.swift │ │ │ │ ├── MoreCoordinator.swift │ │ │ │ └── OpenConferences │ │ │ │ │ ├── Engine │ │ │ │ │ └── Services │ │ │ │ │ │ └── OpenConferencesService.swift │ │ │ │ │ └── UI │ │ │ │ │ ├── OpenConferences.storyboard │ │ │ │ │ ├── OpenConferencesDependency.swift │ │ │ │ │ ├── View │ │ │ │ │ └── OpenConferenceTableViewCell.swift │ │ │ │ │ ├── ViewController │ │ │ │ │ └── OpenConferencesViewController.swift │ │ │ │ │ └── ViewModel │ │ │ │ │ ├── Models+RxDataSources.swift │ │ │ │ │ └── OpenConferencesViewModel.swift │ │ │ └── Onboarding │ │ │ │ ├── Onboarding.storyboard │ │ │ │ ├── OnboardingComponent.swift │ │ │ │ ├── OnboardingCoordinator.swift │ │ │ │ ├── ViewController │ │ │ │ └── OnboardingViewController.swift │ │ │ │ └── ViewModel │ │ │ │ └── OnboardingViewModel.swift │ │ └── Top │ │ │ ├── AppComponent.swift │ │ │ ├── AppCoordinator.swift │ │ │ ├── AppDelegate.swift │ │ │ ├── AppManager.swift │ │ │ └── ComponentsRouter │ │ │ ├── ComponentsRouter+Dependencies.swift │ │ │ ├── ComponentsRouter+Interfaces.swift │ │ │ └── Router │ │ │ ├── ComponentsRouter+Authors.swift │ │ │ ├── ComponentsRouter+Conferences.swift │ │ │ ├── ComponentsRouter+Routers.swift │ │ │ └── ComponentsRouter+Videos.swift │ └── Resources │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-24@2x.png │ │ │ ├── Icon-27.5@2x.png │ │ │ ├── Icon-29@2x.png │ │ │ ├── Icon-29@3x.png │ │ │ ├── Icon-40@2x.png │ │ │ ├── Icon-44@2x.png │ │ │ ├── Icon-86@2x.png │ │ │ ├── Icon-98@2x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x-1.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x-1.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x-1.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ ├── ItunesArtwork@2x-1.png │ │ │ ├── ItunesArtwork@2x.png │ │ │ ├── Logo100-1.png │ │ │ └── Logo216.png │ │ ├── Contents.json │ │ ├── Default │ │ │ ├── Contents.json │ │ │ └── author_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── author_default.png │ │ └── Tabbar │ │ │ ├── Contents.json │ │ │ ├── authors.imageset │ │ │ ├── Contents.json │ │ │ └── authors.pdf │ │ │ ├── conferences.imageset │ │ │ ├── Contents.json │ │ │ └── conference.pdf │ │ │ ├── more.imageset │ │ │ ├── Contents.json │ │ │ └── more.pdf │ │ │ └── videos.imageset │ │ │ ├── Contents.json │ │ │ └── videos.pdf │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Localizable.strings │ │ ├── Info.plist │ │ ├── Settings.bundle │ │ ├── Root.plist │ │ ├── com.mono0926.LicensePlist.latest_result.txt │ │ ├── com.mono0926.LicensePlist.plist │ │ ├── com.mono0926.LicensePlist │ │ │ ├── Action.plist │ │ │ ├── Kingfisher.plist │ │ │ ├── LXVimeoKit.plist │ │ │ ├── MarkdownView.plist │ │ │ ├── MarqueeLabel.plist │ │ │ ├── Nimble.plist │ │ │ ├── NotificationBanner.plist │ │ │ ├── PromiseKit.plist │ │ │ ├── Quick.plist │ │ │ ├── RxDataSources.plist │ │ │ ├── RxSwift.plist │ │ │ ├── SnapKit.plist │ │ │ ├── XCoordinator.plist │ │ │ ├── YoutubeKit.plist │ │ │ └── objective-git.plist │ │ └── en.lproj │ │ │ └── Root.strings │ │ ├── ar.lproj │ │ ├── LaunchScreen.strings │ │ └── Localizable.strings │ │ ├── de.lproj │ │ ├── LaunchScreen.strings │ │ └── Localizable.strings │ │ └── vi-VN.lproj │ │ ├── LaunchScreen.strings │ │ └── Localizable.strings │ ├── SwiftCommunity.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── SwiftCommunity.xcscheme │ │ └── SwiftCommunityUITests.xcscheme │ ├── UITests │ ├── Base │ │ ├── Pages │ │ │ ├── AuthorsPage.swift │ │ │ ├── ConferencesPage.swift │ │ │ ├── PageObject.swift │ │ │ └── VideosPage.swift │ │ ├── Runtime │ │ │ └── XCUIElement+Extensions.swift │ │ └── TestCase │ │ │ └── UITestCase.swift │ ├── Info.plist │ └── Tests │ │ ├── AuthorsPageTests.swift │ │ ├── ConferencesPageTests.swift │ │ └── VideosPageTests.swift │ └── UnitTests │ ├── Base │ ├── Mock │ │ └── GitServiceMock.swift │ └── TestCase │ │ └── UnitTestCase.swift │ ├── Info.plist │ └── Tests │ └── Scenes │ └── OnboardingViewModelTests.swift ├── Tools ├── .swiftlint.yml ├── Bootstrap │ ├── .gitignore │ ├── Package.resolved │ ├── Package.swift │ ├── README.md │ ├── Sources │ │ └── Bootstrap │ │ │ └── main.swift │ └── Tests │ │ └── LinuxMain.swift ├── DangerExtensions │ ├── SigningSettingsCheck.swift │ └── UnitTestsCheck.swift ├── LicensesManager │ ├── .gitignore │ ├── Package.resolved │ ├── Package.swift │ ├── README.md │ └── Sources │ │ └── LicensesManager │ │ ├── Base │ │ ├── Commands │ │ │ └── Carthage │ │ │ │ ├── CarthageCommand.swift │ │ │ │ └── CarthageGenerationCommand.swift │ │ ├── Generator │ │ │ └── LicensesGenerator.swift │ │ ├── Scanner │ │ │ └── CarthageLicensesScanner.swift │ │ └── Utils │ │ │ └── String+Extensions.swift │ │ └── Top │ │ ├── CommandLineTool.swift │ │ └── main.swift ├── Xcode-Templates │ └── SuperArc │ │ ├── Component.xctemplate │ │ ├── TemplateIcon.png │ │ ├── TemplateIcon@2x.png │ │ ├── TemplateInfo.plist │ │ └── ___FILEBASENAME___.swift │ │ ├── CoordinatedDIViewModel.xctemplate │ │ ├── TemplateIcon.png │ │ ├── TemplateIcon@2x.png │ │ ├── TemplateInfo.plist │ │ └── ___FILEBASENAME___.swift │ │ └── ViewController.xctemplate │ │ ├── TemplateIcon.png │ │ ├── TemplateIcon@2x.png │ │ ├── TemplateInfo.plist │ │ └── ___FILEBASENAME___.swift ├── build_landingpage.sh ├── install_templates.sh ├── license-plist └── ui_test.sh ├── fastlane ├── Fastfile ├── README.md ├── Snapfile └── SnapshotHelper.swift └── web ├── landingpage ├── .gitignore ├── CNAME ├── Gemfile ├── LICENSE ├── README.md ├── _config.yml ├── _includes │ ├── appstoreimages.html │ ├── features.html │ ├── footer.html │ ├── head.html │ ├── header.html │ └── screencontent.html ├── _layouts │ ├── default.html │ └── page.html ├── _pages │ ├── changelog.md │ └── privacypolicy.md ├── _sass │ ├── base.scss │ ├── github-markdown.scss │ └── layout.scss ├── assets │ ├── appicon.png │ ├── appstore.png │ ├── black.png │ ├── blue.png │ ├── coral.png │ ├── headerimage.png │ ├── playstore.png │ ├── screenshot │ │ └── conferences.png │ ├── squircle.svg │ ├── squircle120.svg │ ├── testflight.png │ ├── videos │ │ └── Place-video-files-here.txt │ ├── white.png │ └── yellow.png ├── deploy.sh ├── index.html ├── main.scss └── serve.sh └── swiftcommunity.code-workspace /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode11.3 3 | 4 | cache: 5 | directories: 6 | - .build 7 | - Carthage 8 | - ~/.danger-swift 9 | 10 | osx_image: xcode11 11 | 12 | install: 13 | - npm install -g danger@9.2.10 14 | 15 | script: 16 | - swift run danger-swift ci --dangerfile Dangerfile.swift --id swiftlint 17 | - swift run --package-path Tools/Bootstrap/ Bootstrap . 18 | - xcodebuild clean test -workspace SwiftCommunity.xcworkspace -scheme SwiftCommunity -destination "platform=iOS Simulator,name=iPhone 11" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO -enableCodeCoverage YES -derivedDataPath ./.build/DerivedData | xcpretty -c 19 | - swift run danger-swift ci --dangerfile CodeCoverageDangerfile.swift --id codecoverage 20 | -------------------------------------------------------------------------------- /Assets/Documentation/folder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/folder.jpg -------------------------------------------------------------------------------- /Assets/Documentation/navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/navigation.png -------------------------------------------------------------------------------- /Assets/Documentation/registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/registration.png -------------------------------------------------------------------------------- /Assets/Documentation/superarc.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/superarc.pdf -------------------------------------------------------------------------------- /Assets/Documentation/superarc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/superarc.png -------------------------------------------------------------------------------- /Assets/Documentation/xcodeproj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Documentation/xcodeproj.jpg -------------------------------------------------------------------------------- /Assets/Graphics/SCS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Graphics/SCS.png -------------------------------------------------------------------------------- /Assets/Graphics/SCS.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Graphics/SCS.sketch -------------------------------------------------------------------------------- /Assets/Graphics/SCS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Graphics/SCS2.png -------------------------------------------------------------------------------- /Assets/Graphics/SCS3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/Graphics/SCS3.png -------------------------------------------------------------------------------- /Assets/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/screenshot1.png -------------------------------------------------------------------------------- /Assets/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/screenshot2.png -------------------------------------------------------------------------------- /Assets/screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/screenshot3.png -------------------------------------------------------------------------------- /Assets/screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Assets/screenshot4.png -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "ReactiveX/RxSwift" ~> 5.1 2 | github "RxSwiftCommunity/Action" ~> 4.0 3 | github "RxSwiftCommunity/RxDataSources" ~> 4.0 4 | github "mxcl/PromiseKit" ~> 6.0 5 | github "onevcat/Kingfisher" ~> 5.0 6 | github "antranapp/XCoordinator" "xcode1141" 7 | github "antranapp/objective-git" "master" 8 | github "rinov/YoutubeKit" "master" 9 | github "satishVekariya/LXVimeoKit" "master" 10 | github "Daltron/NotificationBanner" "master" 11 | github "keitaoouchi/MarkdownView" ~> 1.6 12 | github "Quick/Quick" ~> 2.0 13 | github "Quick/Nimble" ~> 8.0 -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "Daltron/NotificationBanner" "a852488c04c5bfdb32021711b3dde465ad0899ef" 2 | github "Quick/Nimble" "v8.0.7" 3 | github "Quick/Quick" "v2.2.0" 4 | github "ReactiveX/RxSwift" "5.1.1" 5 | github "RxSwiftCommunity/Action" "4.1.0" 6 | github "RxSwiftCommunity/RxDataSources" "4.0.1" 7 | github "SnapKit/SnapKit" "5.0.1" 8 | github "antranapp/XCoordinator" "d0923e617528d23d87fdfc03247da4d8884ae3e5" 9 | github "antranapp/objective-git" "c50d760e65f120c66677ae376946ee4de6930a90" 10 | github "cbpowell/MarqueeLabel" "4.0.2" 11 | github "keitaoouchi/MarkdownView" "1.6.0" 12 | github "mxcl/PromiseKit" "6.13.1" 13 | github "onevcat/Kingfisher" "5.13.4" 14 | github "rinov/YoutubeKit" "f97a56bbdf8f15abebc6d2d4fdc6a027df466676" 15 | github "satishVekariya/LXVimeoKit" "a947957006f41417fcd8e3b24b08cd1ec3024ddc" 16 | -------------------------------------------------------------------------------- /CodeCoverageDangerfile.swift: -------------------------------------------------------------------------------- 1 | import Danger 2 | import DangerSwiftCoverage 3 | import Foundation 4 | 5 | // Gather coverage for modified files 6 | Coverage.xcodeBuildCoverage(.derivedDataFolder("./.build/DerivedData"), 7 | minimumCoverage: 50, 8 | excludedTargets: []) 9 | -------------------------------------------------------------------------------- /Dangerfile.swift: -------------------------------------------------------------------------------- 1 | import Danger 2 | import Foundation 3 | 4 | let danger = Danger() 5 | 6 | // Check swiftlint. 7 | SwiftLint.lint(configFile: "Tools/.swiftlint.yml") 8 | 9 | // Check for big PR. 10 | if danger.git.createdFiles.count + danger.git.modifiedFiles.count - danger.git.deletedFiles.count > 300 { 11 | warn("Big PR, try to keep changes smaller if you can") 12 | } 13 | 14 | // Check if there are new ViewModels/Services/Managers but no unit tests. 15 | // fileImport: Tools/DangerExtensions/UnitTestsCheck.swift 16 | checkHavingTests(for: "ViewModel") 17 | checkHavingTests(for: "Service") 18 | checkHavingTests(for: "Manager") 19 | 20 | // Check if signing settings in project files are changed 21 | // fileImport: Tools/DangerExtensions/SigningSettingsCheck.swift 22 | checkChangingSigningSettings() 23 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.1 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "SwiftCommunity", 6 | products: [ 7 | .library(name: "DangerDepsSwiftCommunity", type: .dynamic, targets: ["DangerDependencies"]), 8 | ], 9 | dependencies: [ 10 | .package(url: "https://github.com/danger/swift.git", from: "3.0.0"), 11 | .package(url: "https://github.com/f-meloni/danger-swift-coverage", from: "1.1.0") 12 | ], 13 | targets: [ 14 | .target( 15 | name: "DangerDependencies", 16 | dependencies: ["Danger", "DangerSwiftCoverage"] 17 | ), 18 | ] 19 | ) 20 | -------------------------------------------------------------------------------- /Sources/DangerDependencies/Fake.swift: -------------------------------------------------------------------------------- 1 | // swiftlint:disable trailing_newline 2 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Base/Router/ComponentsRouter+Dependencies.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreComponent 6 | 7 | extension Navigator: FeatureADependency {} 8 | extension Navigator: FeatureBDependency {} 9 | extension Navigator: FeatureCDependency {} 10 | extension Navigator: FeatureDDependency {} 11 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Base/Router/ComponentsRouter+Interfaces.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreComponent 6 | 7 | extension NavigatorProtocol { 8 | 9 | var featureAInterface: FeatureAInterfaceProtocol { 10 | return interfaceRegistry.resolve(type: FeatureAInterfaceProtocol.self) 11 | } 12 | 13 | var featureBInterface: FeatureBInterfaceProtocol { 14 | return interfaceRegistry.resolve(type: FeatureBInterfaceProtocol.self) 15 | } 16 | 17 | var featureCInterface: FeatureCInterfaceProtocol { 18 | return interfaceRegistry.resolve(type: FeatureCInterfaceProtocol.self) 19 | } 20 | 21 | var featureDInterface: FeatureDInterfaceProtocol { 22 | return interfaceRegistry.resolve(type: FeatureDInterfaceProtocol.self) 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Scenes/Dashboard/DashboardViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | 7 | class DashboardViewController: TabBarController, StoryboardInitiable { 8 | 9 | static var storyboardName = "Dashboard" 10 | } 11 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Scenes/FeatureC/FeatureCViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | class FeatureCViewController: CollectionViewController, StoryboardInitiable { 9 | 10 | static var storyboardName = "FeatureC" 11 | } 12 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/Sources/Scenes/FeatureD/FeatureDViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | class FeatureDViewController: ViewController, StoryboardInitiable { 9 | 10 | static var storyboardName = "FeatureD" 11 | } 12 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/UITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/UnitTests/ExampleAppTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleAppTests.swift 3 | // ExampleAppTests 4 | // 5 | // Created by An Tran on 10.09.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ExampleApp 11 | 12 | class ExampleAppTests: XCTestCase { 13 | 14 | override func setUp() { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleApp/UnitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureA/Sources/Top/FeatureA.h: -------------------------------------------------------------------------------- 1 | // 2 | // FeatureA.h 3 | // FeatureA 4 | // 5 | // Created by An Tran on 09.09.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for FeatureA. 12 | FOUNDATION_EXPORT double FeatureAVersionNumber; 13 | 14 | //! Project version string for FeatureA. 15 | FOUNDATION_EXPORT const unsigned char FeatureAVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureA/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureA/Tests/FeatureATests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FeatureATests.swift 3 | // FeatureATests 4 | // 5 | // Created by An Tran on 09.09.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import FeatureA 11 | 12 | class FeatureATests: XCTestCase { 13 | 14 | override func setUp() { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureA/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureB/FeatureBTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureB/Sources/Top/FeatureB.h: -------------------------------------------------------------------------------- 1 | // 2 | // FeatureB.h 3 | // FeatureB 4 | // 5 | // Created by An Tran on 09.09.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for FeatureB. 12 | FOUNDATION_EXPORT double FeatureBVersionNumber; 13 | 14 | //! Project version string for FeatureB. 15 | FOUNDATION_EXPORT const unsigned char FeatureBVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/FeatureB/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Base/Router/ComponentsRouter+Dependencies.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import FeatureA 6 | import FeatureB 7 | import SuperArcCoreComponent 8 | 9 | extension Navigator: FeatureADependency {} 10 | extension Navigator: FeatureBDependency {} 11 | extension Navigator: FeatureCDependency {} 12 | extension Navigator: FeatureDDependency {} 13 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Base/Router/ComponentsRouter+Interfaces.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import FeatureA 6 | import FeatureB 7 | import SuperArcCoreComponent 8 | 9 | extension NavigatorProtocol { 10 | 11 | var featureAInterface: FeatureAInterfaceProtocol { 12 | return interfaceRegistry.resolve(type: FeatureAInterfaceProtocol.self) 13 | } 14 | 15 | var featureBInterface: FeatureBInterfaceProtocol { 16 | return interfaceRegistry.resolve(type: FeatureBInterfaceProtocol.self) 17 | } 18 | 19 | var featureCInterface: FeatureCInterfaceProtocol { 20 | return interfaceRegistry.resolve(type: FeatureCInterfaceProtocol.self) 21 | } 22 | 23 | var featureDInterface: FeatureDInterfaceProtocol { 24 | return interfaceRegistry.resolve(type: FeatureDInterfaceProtocol.self) 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Base/Router/ComponentsRouter+Routers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import FeatureA 6 | import FeatureB 7 | import SuperArcCoreComponent 8 | 9 | extension Navigator: HasFeatureAComponentRouter { 10 | 11 | public var featureARouter: AnyComponentRouter { 12 | return routerRegistry.resolve(type: FeatureAComponentRouter.self).anyFeatureARouter 13 | } 14 | } 15 | 16 | extension Navigator: HasFeatureBComponentRouter { 17 | 18 | public var featureBRouter: AnyComponentRouter { 19 | return routerRegistry.resolve(type: FeatureBComponentRouter.self).anyFeatureBRouter 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Scenes/Dashboard/DashboardViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | 7 | class DashboardViewController: TabBarController, StoryboardInitiable { 8 | 9 | static var storyboardName = "Dashboard" 10 | } 11 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Scenes/FeatureC/FeatureCViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | class FeatureCViewController: CollectionViewController, StoryboardInitiable { 9 | 10 | static var storyboardName = "FeatureC" 11 | } 12 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/Sources/Scenes/FeatureD/FeatureDViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | class FeatureDViewController: ViewController, StoryboardInitiable { 9 | 10 | static var storyboardName = "FeatureD" 11 | } 12 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/UITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/Example/ExampleAppRouter/UnitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcActivityIndicator/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/Activity+Rx.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #if canImport(RxSwift) && canImport(RxCocoa) 6 | 7 | import SuperArcCoreUI 8 | import SuperArcCore 9 | import RxCocoa 10 | import RxSwift 11 | 12 | // MARK: - Activity binding 13 | 14 | /// Convenience binding to show and hide the activity indicator. 15 | extension Reactive where Base: UIViewController { 16 | 17 | public var activity: Binder { 18 | return Binder(self.base) { viewController, isBusy in 19 | guard let activitySinkHolder = viewController as? HasActivitySink else { 20 | return 21 | } 22 | 23 | let activitySink = activitySinkHolder.activitySink 24 | 25 | isBusy ? activitySink.showActivity(in: self.base.view) : activitySink.hideActivity() 26 | } 27 | } 28 | } 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/Activity.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import RxCocoa 6 | import RxSwift 7 | 8 | public protocol ActivityState { 9 | var activity: Activity { get } 10 | } 11 | 12 | public class Activity { 13 | 14 | // MARK: Properties 15 | 16 | // Private 17 | 18 | private var counter = 0 { 19 | didSet { 20 | counter > 0 ? active.onNext(true) : active.onNext(false) 21 | } 22 | } 23 | 24 | // Public 25 | 26 | public var active = BehaviorSubject(value: false) 27 | 28 | // MARK: Intialization 29 | 30 | public init() {} 31 | 32 | // MARK: APIs 33 | 34 | public func start() { 35 | counter += 1 36 | } 37 | 38 | public func stop() { 39 | counter = max(0, counter - 1) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/ActivityPresenter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | public class ActivityPresenter: ActivitySink { 8 | 9 | // MARK: Properties 10 | 11 | // Private 12 | 13 | private let animated: Bool 14 | private let style: ActivityViewStyle 15 | 16 | private var activityView: ActivityView? 17 | 18 | // MARK: Initialization 19 | 20 | public init(animated: Bool = false, style: ActivityViewStyle = .standard) { 21 | self.animated = animated 22 | self.style = style 23 | } 24 | 25 | // MARK: APIs 26 | 27 | public func showActivity(in view: UIView? = nil) { 28 | if let view = view { 29 | activityView = ActivityView.showInView(view, animated: animated, style: style) 30 | } else { 31 | activityView = ActivityView.showInMainWindow(animated, style: style) 32 | } 33 | } 34 | 35 | public func hideActivity() { 36 | activityView?.hide(animated) 37 | activityView = nil 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/ActivitySink.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol providing ability to show/hide activity indicator. 6 | public protocol ActivitySink: class { 7 | func showActivity(in view: UIView?) 8 | func hideActivity() 9 | } 10 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/ActivityView/ActivityViewStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | public struct ActivityViewStyle { 8 | public let backdropColor: UIColor 9 | public let backgroundColor: UIColor 10 | public let spinnerColor: UIColor 11 | } 12 | 13 | extension ActivityViewStyle { 14 | public static let standard = ActivityViewStyle(backdropColor: UIColor.black.withAlphaComponent(0.1), backgroundColor: UIColor.black.withAlphaComponent(0.5), spinnerColor: .white) 15 | } 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Base/ViewController+ActivitySink.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | public protocol HasActivitySink { 9 | var activitySink: ActivitySink { get } 10 | } 11 | 12 | extension ViewController: HasActivitySink { 13 | public var activitySink: ActivitySink { 14 | return viewControllerContext.resolve(type: ActivityPresenter.self) 15 | } 16 | } 17 | 18 | extension CollectionViewController: HasActivitySink { 19 | public var activitySink: ActivitySink { 20 | return viewControllerContext.resolve(type: ActivityPresenter.self) 21 | } 22 | } 23 | 24 | extension TableViewController: HasActivitySink { 25 | public var activitySink: ActivitySink { 26 | return viewControllerContext.resolve(type: ActivityPresenter.self) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Sources/Top/SuperArcActivityIndicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcActivityIndicator. 8 | FOUNDATION_EXPORT double SuperArcActivityIndicatorVersionNumber; 9 | 10 | //! Project version string for SuperArcActivityIndicator. 11 | FOUNDATION_EXPORT const unsigned char SuperArcActivityIndicatorVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/SuperArcActivityIndicator.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/SuperArcActivityIndicator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SuperArc/SuperArcActivityIndicator/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoordinator/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcCoordinator/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcCoordinator/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoordinator/Sources/Top/SuperArcCoordinator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcCoordinator. 8 | FOUNDATION_EXPORT double SuperArcCoordinatorVersionNumber; 9 | 10 | //! Project version string for SuperArcCoordinator. 11 | FOUNDATION_EXPORT const unsigned char SuperArcCoordinatorVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoordinator/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcCore/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Engine/DomainLogic/Model/Model.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | open class Model: Codable { 6 | 7 | // MARK: Properties 8 | 9 | open var updateTimestamp: TimeInterval = 0 10 | 11 | public var data: T? 12 | 13 | public enum CodingKeys: String, CodingKey { 14 | case updateTimestamp 15 | case data 16 | } 17 | 18 | // MARK: Intialization 19 | 20 | required public init(from decoder: Decoder) throws { 21 | let container = try decoder.container(keyedBy: CodingKeys.self) 22 | updateTimestamp = try container.decode(TimeInterval.self, forKey: .updateTimestamp) 23 | data = try container.decode(T.self, forKey: .data) 24 | } 25 | 26 | public func encode(to encoder: Encoder) throws { 27 | var container = encoder.container(keyedBy: CodingKeys.self) 28 | try container.encode(updateTimestamp, forKey: .updateTimestamp) 29 | try container.encode(data, forKey: .data) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Engine/DomainLogic/Service/Service.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import Foundation 7 | 8 | public protocol Service: ClassNameDerivable { 9 | var context: ServiceContext { get } 10 | } 11 | 12 | /// Services adopting this protocol can be auto-created by the Engine. 13 | public protocol OnDemandService { 14 | init(onDemandWith context: ServiceContext) 15 | } 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Engine/DomainLogic/Service/ServiceRegistry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public class ServiceRegistry: Registry { 8 | 9 | // MARK: Properties 10 | 11 | public var container: Container 12 | 13 | // MARK: Initialization 14 | 15 | public init() { 16 | container = Container() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Engine/Engine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol HasServiceContext { 6 | var serviceContext: ServiceContext { get } 7 | } 8 | 9 | /// Protocol defining required dependencies used for processing business logic. 10 | /// Normally, a component only needs a subset of objects in engine to fullfill his dependency requirement. 11 | public protocol EngineProtocol: HasServiceContext { 12 | var serviceContext: ServiceContext { get } 13 | var serviceRegistry: ServiceRegistry { get } 14 | } 15 | 16 | public protocol HasEngine { 17 | var engine: EngineProtocol { get set } 18 | } 19 | 20 | public class Engine: EngineProtocol { 21 | 22 | // MARK: Properties 23 | 24 | public let serviceContext: ServiceContext 25 | 26 | public let serviceRegistry = ServiceRegistry() 27 | 28 | // MARK: Initialization 29 | 30 | public init(serviceContext: ServiceContext) { 31 | self.serviceContext = serviceContext 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Top/Core.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcNetwork 6 | import SuperArcFoundation 7 | 8 | public class Core: HasApplicationContext { 9 | 10 | // MARK: Properties 11 | 12 | // Public 13 | 14 | public var context: ApplicationContextProtocol! 15 | 16 | // MARK: Initialization 17 | 18 | public init(endpoint: Endpoint, configurations: AnyRegistry) { 19 | let serviceContext = ServiceContext(endpoint: endpoint, configurations: configurations) 20 | let engine = Engine(serviceContext: serviceContext) 21 | context = ApplicationContext(engine: engine) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/Top/SuperArcCore.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcCore. 8 | FOUNDATION_EXPORT double SuperArcCoreVersionNumber; 9 | 10 | //! Project version string for SuperArcCore. 11 | FOUNDATION_EXPORT const unsigned char SuperArcCoreVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/UI/ApplicationContext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public protocol HasApplicationContext: class { 8 | var context: ApplicationContextProtocol! { get set } 9 | } 10 | 11 | public protocol HasViewControllerContext: class { 12 | var viewControllerContext: ViewControllerContext! { get set } 13 | } 14 | 15 | /// Protocol defining required depedencies used for processing application logic & driving UIs. 16 | /// Normally every ViewController will have reference to an object adopting this protocol. 17 | public protocol ApplicationContextProtocol: HasViewControllerContext, HasEngine {} 18 | 19 | public class ApplicationContext: ApplicationContextProtocol { 20 | 21 | // MARK: Properties 22 | 23 | // Public 24 | 25 | public var engine: EngineProtocol 26 | public var viewControllerContext: ViewControllerContext! = ViewControllerContext() 27 | 28 | // MARK: Initialization 29 | 30 | public init(engine: EngineProtocol) { 31 | self.engine = engine 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/UI/ApplicationDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public protocol ViewControllerDependency {} 8 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Sources/UI/ApplicationDependencyRegistry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | /// Dependencies required by all view controllers. 8 | public class ViewControllerContext: Registry { 9 | 10 | // MARK: Properties 11 | 12 | public var container: Container 13 | 14 | // MARK: Initialization 15 | 16 | public init() { 17 | container = Container() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCore/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcCoreComponent/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/Dependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// The tagging protocol for objects that serve as dependencies for components. 6 | public protocol Dependency: AnyObject {} 7 | 8 | /// The special dependency protocol which is empty. 9 | public protocol EmptyDependency: Dependency {} 10 | 11 | public final class AnyDependency: Dependency { 12 | 13 | /// The dependency of this component, which is should be provided by the parent of this component. 14 | public var dependency: DependencyType! 15 | 16 | public init(dependency: DependencyType) { 17 | self.dependency = dependency 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/Interface/Interface.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | /// Public interfaces to interact with the components. 8 | public protocol Interface {} 9 | 10 | /// Support creating `Interface` on-demand. 11 | public protocol OnDemandInterface: Interface { 12 | init(onDemandWith navigator: Navigator, viewControllerContext: ViewControllerContext, and dependencyProvider: DependencyProvider) 13 | } 14 | 15 | /// A special `Interface` which is empty. 16 | public class EmptyInterface: Interface {} 17 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/Navigation/ComponentPresentable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol describing a component that can be presented. 6 | public protocol ComponentPresentable { 7 | var viewController: UIViewController! { get } 8 | } 9 | 10 | extension UIViewController: ComponentPresentable { 11 | 12 | public var viewController: UIViewController! { 13 | return self 14 | } 15 | } 16 | 17 | extension UIWindow: ComponentPresentable { 18 | 19 | public var viewController: UIViewController! { 20 | return rootViewController! 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/Navigation/ComponentRoute.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol defining routes that a component can navigate to. 6 | public protocol ComponentRoute {} 7 | 8 | /// A special route type which has no route. 9 | public struct EmptyComponentRoute: ComponentRoute {} 10 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/ViewBuilder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// The tagging protocol for objects that can construct views/view contorllers used in a specific module. 6 | public protocol ViewBuildable {} 7 | 8 | public protocol EmptyViewBuildable: ViewBuildable {} 9 | 10 | public protocol InterfaceBuildable {} 11 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Base/ViewController/ViewControllerRoutable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | public protocol ViewControllerRoutable where Self: CommonViewControllerProtocol { 9 | associatedtype ComponentRouteType: ComponentRoute 10 | 11 | var componentsRouter: AnyComponentRouter { get } 12 | } 13 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Top/CommonViewController+ComponentsRouter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | 7 | extension CommonViewControllerProtocol { 8 | 9 | public var navigator: NavigatorProtocol { 10 | return viewControllerContext.resolve(type: Navigator.self) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Top/DependencyProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | public protocol DependencyProvider: HasApplicationContext {} 8 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Sources/Top/SuperArcCoreComponent.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcCoreComponent. 8 | FOUNDATION_EXPORT double SuperArcCoreComponentVersionNumber; 9 | 10 | //! Project version string for SuperArcCoreComponent. 11 | FOUNDATION_EXPORT const unsigned char SuperArcCoreComponentVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreComponent/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcCoreUI/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Base/View/View.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | /// Unified template to initialize an UIView. 8 | open class View: UIView { 9 | 10 | // MARK: Initialization 11 | 12 | public override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setup() 15 | } 16 | 17 | required public init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setup() 20 | } 21 | 22 | // MARK: APIs 23 | 24 | open func setup() { 25 | fatalError("needed to be subclassed") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Base/ViewController/NavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | import UIKit 7 | 8 | open class NavigationController: UINavigationController, HasViewControllerContext { 9 | 10 | public var viewControllerContext: ViewControllerContext! { 11 | didSet { 12 | topViewController?.setViewControllerContext(viewControllerContext) 13 | } 14 | } 15 | 16 | open override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 17 | segue.destination.setViewControllerContext(viewControllerContext) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Base/ViewController/UIViewController+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | import UIKit 7 | 8 | extension UIViewController { 9 | 10 | public func setViewControllerContext(_ context: ViewControllerContext) { 11 | if let contextHolder = self as? HasViewControllerContext { 12 | contextHolder.viewControllerContext = context 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Base/ViewModel/ViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | public protocol ViewModelProtocol {} 8 | 9 | open class ViewModel: ViewModelProtocol { 10 | 11 | // MARK: Initialization 12 | 13 | public init() { 14 | setup() 15 | } 16 | 17 | open func setup() { 18 | // Override if you want to setup this viewModel such as data bindings etc... 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Base/ViewModel/ViewModelBindable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | public protocol ViewModelBindable: class { 8 | associatedtype ViewModelType: ViewModelProtocol 9 | 10 | var viewModel: ViewModelType! { get set } 11 | 12 | func setupBindings() 13 | } 14 | 15 | extension ViewModelBindable where Self: CommonViewControllerProtocol { 16 | func bind(to model: Self.ViewModelType) { 17 | viewModel = model 18 | commonViewDidLoad() 19 | } 20 | } 21 | 22 | extension ViewModelBindable where Self: View { 23 | func bind(to model: Self.ViewModelType) { 24 | viewModel = model 25 | setupBindings() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Runtime/Extensions/UIImage+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | public extension UIImage { 8 | 9 | class func named(_ name: String, bundleClass: AnyClass) -> UIImage? { 10 | return UIImage(named: name, in: Bundle(for: bundleClass), compatibleWith: nil) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Runtime/StoryboardInitiable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | import UIKit 7 | 8 | public protocol StoryboardInitiable: class { 9 | static var storyboardName: String { get } 10 | static func instantiate() -> Self 11 | } 12 | 13 | extension StoryboardInitiable { 14 | public static func instantiate() -> Self { 15 | let identifier = String(describing: Self.self) 16 | return UIStoryboard(name: storyboardName, bundle: Bundle(for: Self.self)).instantiateViewController(withIdentifier: identifier) as! Self 17 | } 18 | } 19 | 20 | extension StoryboardInitiable where Self: UIViewController { 21 | public static func instantiate(with context: ViewControllerContext) -> Self { 22 | let viewController = instantiate() 23 | viewController.setViewControllerContext(context) 24 | return viewController 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Sources/Top/SuperArcCoreUI.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcCoreUI. 8 | FOUNDATION_EXPORT double SuperArcCoreUIVersionNumber; 9 | 10 | //! Project version string for SuperArcCoreUI. 11 | FOUNDATION_EXPORT const unsigned char SuperArcCoreUIVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcCoreUI/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcFoundation/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Configuration/Configuration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol Configuration { 6 | var endpoint: Endpoint { get } 7 | } 8 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Configuration/ConfigurationRegistry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol HasConfigurations { 6 | var configurations: AnyRegistry { get } 7 | } 8 | 9 | open class ConfigurationsRegistry: Registry { 10 | 11 | // MARK: Properties 12 | 13 | // Public 14 | 15 | public var container: Container 16 | 17 | // Private 18 | 19 | private let endpoint: Endpoint 20 | 21 | // MARK: Initialization 22 | 23 | public init(endpoint: Endpoint) { 24 | self.endpoint = endpoint 25 | container = Container() 26 | 27 | setup() 28 | } 29 | 30 | // MARK: Private helpers 31 | 32 | open func setup() { 33 | // pre-register any new type of configuration here 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Configuration/Endpoint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public struct Endpoint: RawRepresentable { 6 | public var rawValue: String 7 | 8 | public init(_ rawValue: String) { 9 | self.rawValue = rawValue 10 | } 11 | 12 | public init?(rawValue: String) { 13 | self.rawValue = rawValue 14 | } 15 | } 16 | 17 | extension Endpoint { 18 | public static let production = Endpoint("production") 19 | public static let staging = Endpoint("staging") 20 | public static let development = Endpoint("development") 21 | } 22 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Continuation/Continuation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | extension Result { 6 | public typealias Continuation = (Result) -> Void 7 | } 8 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/ClassNameDerivable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol ClassNameDerivable: class { 6 | var className: String { get } 7 | } 8 | 9 | extension ClassNameDerivable { 10 | public var className: String { 11 | return String(describing: self) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/Comparable+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | extension Comparable { 6 | 7 | /// Clamp the current value between 2 lower and upper limit values. 8 | /// 9 | /// 15.clamped(to: 0...10) -> returns 10 10 | /// 3.0.clamped(to: 0.0...10.0) -> returns 3.0 11 | /// "a".clamped(to: "g"..."y") -> returns "g" 12 | public func clamped(to limits: ClosedRange) -> Self { 13 | return min(max(self, limits.lowerBound), limits.upperBound) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/Date+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | extension Date { 8 | 9 | public var currentYear: Int { 10 | let calendar = Calendar.current 11 | let components = calendar.dateComponents([.year], from: self) 12 | return components.year! 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/Dictionary+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | extension Dictionary { 6 | public mutating func merge(with dict: [Key: Value]) { 7 | for (k, v) in dict { 8 | updateValue(v, forKey: k) 9 | } 10 | } 11 | } 12 | 13 | public func + (lhs: [K: V], rhs: [K: V]) -> [K: V] { 14 | var combined = lhs 15 | for (k, v) in rhs { 16 | combined[k] = v 17 | } 18 | return combined 19 | } 20 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/Int+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public extension Int { 8 | 9 | var asString: String { 10 | return "\(self)" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/NSObject+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public extension NSObject { 8 | 9 | /// Returns name of the class. 10 | class var className: String { 11 | return String(describing: self) 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/Runtime/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | extension String { 8 | 9 | public func combinePath(_ component: String) -> String { 10 | return NSString(string: self).appendingPathComponent(component) 11 | } 12 | 13 | public var urlComponents: URLComponents { 14 | return URLComponents(string: self)! 15 | } 16 | 17 | public var basePath: String { 18 | return (self as NSString).deletingLastPathComponent 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Sources/SupportingFiles/SuperArcFoundation.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcFoundation. 8 | FOUNDATION_EXPORT double SuperArcFoundationVersionNumber; 9 | 10 | //! Project version string for SuperArcFoundation. 11 | FOUNDATION_EXPORT const unsigned char SuperArcFoundationVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcFoundation/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcLocalization/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Base/Runtime/String+Localization.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | extension String { 6 | 7 | public var localized: String { 8 | return NSLocalizedString(self, comment: "") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Base/UI/UILabel+Localization.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | extension UILabel { 8 | @IBInspectable public var textKey: String? { 9 | get { 10 | return accessibilityIdentifier 11 | } 12 | set { 13 | accessibilityIdentifier = newValue 14 | text = newValue?.localized 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Base/UI/UITabBarItem+Localization.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | extension UITabBarItem { 8 | 9 | public convenience init(titleKey: String, image: UIImage?, tag: Int) { 10 | self.init(title: titleKey.localized, image: image, tag: tag) 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Base/UI/UIViewController+Localization.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | extension UIViewController { 8 | 9 | @IBInspectable public var titleKey: String { 10 | get { 11 | return "" 12 | } 13 | set { 14 | title = newValue.localized 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Sources/Top/SuperArcLocalization.h: -------------------------------------------------------------------------------- 1 | // 2 | // SuperArcLocalization.h 3 | // SuperArcLocalization 4 | // 5 | // Created by An Tran on 01.09.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for SuperArcLocalization. 12 | FOUNDATION_EXPORT double SuperArcLocalizationVersionNumber; 13 | 14 | //! Project version string for SuperArcLocalization. 15 | FOUNDATION_EXPORT const unsigned char SuperArcLocalizationVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /SuperArc/SuperArcLocalization/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcModelManager/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Sources/SupportingFiles/SuperArcModelManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcModelManager. 8 | FOUNDATION_EXPORT double SuperArcModelManagerVersionNumber; 9 | 10 | //! Project version string for SuperArcModelManager. 11 | FOUNDATION_EXPORT const unsigned char SuperArcModelManagerVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Sources/Top/DataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataSource.swift 3 | // SuperArcModelManager 4 | // 5 | // Created by An Tran on 09.11.19. 6 | // Copyright © 2019 An Tran. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Sources/Top/Model.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Sources/Top/ModelManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | -------------------------------------------------------------------------------- /SuperArc/SuperArcModelManager/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcNetwork/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/Base/HTTPMethod.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public enum HTTPMethod: String, Encodable { 6 | case get = "GET" 7 | case put = "PUT" 8 | case delete = "DELETE" 9 | case post = "POST" 10 | } 11 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/Base/RequestResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol JSONResponse: Decodable {} 6 | 7 | public struct EmptyResponse: JSONResponse {} 8 | 9 | open class JSONRequest: RawJSONRequest { 10 | 11 | open var cancellable: Bool { 12 | return true 13 | } 14 | 15 | open var headers: [String: String]? 16 | } 17 | 18 | open class RawJSONRequest: Encodable { 19 | 20 | public let httpMethod: HTTPMethod 21 | public let components: URLComponents 22 | 23 | public init(httpMethod: HTTPMethod, components: URLComponents) { 24 | self.httpMethod = httpMethod 25 | self.components = components 26 | } 27 | } 28 | 29 | /// Error objects can adopt this protocol to get configured about the request path used for error handling. 30 | public protocol ErrorResponse: class { 31 | 32 | /// Informs self about the `path` used for the failing request. 33 | func configure(withPath path: String) 34 | } 35 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/Base/Server.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public protocol CommunicationInterface { 8 | var channels: Container { get } 9 | } 10 | 11 | protocol Server: CommunicationInterface { 12 | associatedtype ChannelType = ChannelProtocol 13 | associatedtype ConfigurationType = ServerConfiguration 14 | } 15 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/Base/ServerConfiguration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public protocol ServerConfiguration: Configuration { 8 | var baseURL: URL { get } 9 | } 10 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Sources/SupportingFiles/SuperArcNetwork.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcNetwork. 8 | FOUNDATION_EXPORT double SuperArcNetworkVersionNumber; 9 | 10 | //! Project version string for SuperArcNetwork. 11 | FOUNDATION_EXPORT const unsigned char SuperArcNetworkVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNetwork/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcNotificationBanner/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/Sources/Base/Notification.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | // MARK: Enums 6 | 7 | public enum NotificationType { 8 | case error(error: Error) 9 | case text(message: String) 10 | } 11 | 12 | public enum NotificationStyle { 13 | case error 14 | case info 15 | case hint 16 | case success 17 | case debug 18 | case silent 19 | } 20 | 21 | public protocol Notification { 22 | var type: NotificationType { get } 23 | var style: NotificationStyle { get } 24 | } 25 | 26 | public struct StandardNotification: Notification { 27 | 28 | public let type: NotificationType 29 | public let style: NotificationStyle 30 | 31 | public init(error: Error) { 32 | type = .error(error: error) 33 | style = .error 34 | } 35 | 36 | public init(message: String, style: NotificationStyle) { 37 | type = .text(message: message) 38 | self.style = style 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/Sources/Base/ViewController+NotificationSink.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | 8 | public protocol HasNotificationSink { 9 | var notificationSink: NotificationSink { get } 10 | } 11 | 12 | extension ViewController: HasNotificationSink { 13 | public var notificationSink: NotificationSink { 14 | return viewControllerContext.resolve(type: NotificationPresenter.self) 15 | } 16 | } 17 | 18 | extension CollectionViewController: HasNotificationSink { 19 | public var notificationSink: NotificationSink { 20 | return viewControllerContext.resolve(type: NotificationPresenter.self) 21 | } 22 | } 23 | 24 | extension TableViewController: HasNotificationSink { 25 | public var notificationSink: NotificationSink { 26 | return viewControllerContext.resolve(type: NotificationPresenter.self) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/Sources/Top/SuperArcNotificationBanner.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcNotificationBanner. 8 | FOUNDATION_EXPORT double SuperArcNotificationBannerVersionNumber; 9 | 10 | //! Project version string for SuperArcNotificationBanner. 11 | FOUNDATION_EXPORT const unsigned char SuperArcNotificationBannerVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcNotificationBanner/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcStateView/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Sources/Base/StateView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcFoundation 7 | import UIKit 8 | 9 | /// Fullscreen state view which can show error/empty state of a view controller. 10 | class StateView: View, ClassNameDerivable { 11 | 12 | // MARK: Properties 13 | 14 | // IBOutlet 15 | 16 | @IBOutlet weak var headlineLabel: UILabel! 17 | 18 | // MARK: Setup 19 | 20 | override func setup() { 21 | 22 | if let stateView = StateView.instantiateFromNib(owner: self) { 23 | addAndStretchSubView(stateView) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Sources/Base/StateViewContext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol StateViewContext { 6 | var headline: String { get } 7 | var subline: String? { get } 8 | } 9 | 10 | public class StandardStateViewContext: StateViewContext { 11 | public var headline: String 12 | public var subline: String? 13 | 14 | public init(headline: String, subline: String? = nil) { 15 | self.headline = headline 16 | self.subline = subline 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Sources/Base/StateViewPresentable+ViewControllers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | 7 | extension ViewController: StateViewDisplayable {} 8 | extension TableViewController: StateViewDisplayable {} 9 | extension CollectionViewController: StateViewDisplayable {} 10 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Sources/Top/SuperArcStateView.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcStateView. 8 | FOUNDATION_EXPORT double SuperArcStateViewVersionNumber; 9 | 10 | //! Project version string for SuperArcStateView. 11 | FOUNDATION_EXPORT const unsigned char SuperArcStateViewVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStateView/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcStore/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/Base/AsyncStoreProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import Foundation 7 | 8 | public protocol AsyncStoreProtocol { 9 | 10 | var name: String { get } 11 | 12 | // MARK: CRUD 13 | 14 | func read(_ key: String, continuation: @escaping Result.Continuation) 15 | 16 | func write(_ key: String, value: StoreValue, continuation: @escaping Swift.Result.Continuation) 17 | 18 | func delete(_ key: String, continuation: @escaping Result.Continuation) 19 | 20 | func reset() throws 21 | } 22 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/Base/StoreProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public protocol StoreProtocol { 8 | 9 | var name: String { get } 10 | 11 | // MARK: CRUD 12 | 13 | func read(_ key: String) throws -> StoreValue? 14 | 15 | func write(_ key: String, value: StoreValue) throws 16 | 17 | func delete(_ key: String) throws 18 | 19 | func reset() throws 20 | 21 | // MARK: Keys listing 22 | 23 | var keys: Set { get } 24 | } 25 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/Base/StoreValue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public protocol StoreValue { 8 | var data: Data { get } 9 | } 10 | 11 | extension Data: StoreValue { 12 | public var data: Data { 13 | return self 14 | } 15 | } 16 | 17 | extension NSData: StoreValue { 18 | public var data: Data { 19 | return self as Data 20 | } 21 | } 22 | 23 | extension String: StoreValue { 24 | 25 | public init?(storeValue: StoreValue) { 26 | if let string = String(data: storeValue.data, encoding: String.Encoding.utf8) { 27 | self = string 28 | } else { 29 | return nil 30 | } 31 | } 32 | 33 | public var data: Data { 34 | return data(using: .utf8, allowLossyConversion: false)! 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/SupportingFiles/SuperArcStore.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcStore. 8 | FOUNDATION_EXPORT double SuperArcStoreVersionNumber; 9 | 10 | //! Project version string for SuperArcStore. 11 | FOUNDATION_EXPORT const unsigned char SuperArcStoreVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Sources/Top/MemoryStore.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public class MemoryStore: StoreProtocol { 6 | 7 | // MARK: Properties 8 | 9 | // Private 10 | 11 | private var memory = [String: StoreValue]() 12 | 13 | // Public 14 | 15 | public var name: String 16 | 17 | // MARK: Initialization 18 | 19 | public init(name: String) { 20 | self.name = name 21 | } 22 | 23 | // MARK: API 24 | 25 | public func read(_ key: String) throws -> StoreValue? { 26 | return memory[key] 27 | } 28 | 29 | public func write(_ key: String, value: StoreValue) throws { 30 | memory[key] = value 31 | } 32 | 33 | public func delete(_ key: String) throws { 34 | memory.removeValue(forKey: key) 35 | } 36 | 37 | public func reset() throws { 38 | memory.removeAll() 39 | } 40 | 41 | public var keys: Set { 42 | return Set(memory.keys) 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /SuperArc/SuperArcStore/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcTaskCoordinator/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SuperArc/SuperArcTaskCoordinator/README.md -------------------------------------------------------------------------------- /SuperArc/SuperArcTaskCoordinator/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SuperArc/SuperArcTaskCoordinator/Sources/SupportingFiles/SuperArcTaskCoordinator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for SuperArcTaskCoordinator. 8 | FOUNDATION_EXPORT double SuperArcTaskCoordinatorVersionNumber; 9 | 10 | //! Project version string for SuperArcTaskCoordinator. 11 | FOUNDATION_EXPORT const unsigned char SuperArcTaskCoordinatorVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SuperArc/SuperArcTaskCoordinator/Sources/Top/TaskQueue+Promise.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import PromiseKit 6 | 7 | extension TaskQueue { 8 | 9 | @discardableResult 10 | public func run(_ task: @escaping () -> Promise) -> Promise { 11 | return Promise { resolver in 12 | start { 13 | task().done { result in 14 | resolver.fulfill(result) 15 | }.catch { error in 16 | resolver.reject(error) 17 | }.finally { 18 | self.finish() 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SuperArc/SuperArcTaskCoordinator/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Dependencies/AuthorsDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol defining all dependencies required by this component. 6 | public typealias AuthorsDependency = HasAuthorsService & HasVideosService 7 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Dependencies/ConferencesDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol defining all dependencies required by this component. 6 | public typealias ConferencesDependency = HasConferencesService & HasConferencesGitService & HasVideosService & HasAuthorsService 7 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Dependencies/VideosDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | /// Protocol defining all dependencies required by this component. 6 | public typealias VideosDependency = HasVideosService & HasAuthorsService 7 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Configurations/GitServiceConfigurationProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | public protocol GitRepositoryConfigurationProtocol: Configuration { 8 | var conferencesRepositoryURL: URL { get } 9 | var algorithmRepositoryURL: URL { get } 10 | } 11 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Domain/Services/AuthorsServiceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import DataModels 6 | import PromiseKit 7 | 8 | public protocol HasAuthorsService { 9 | var authorsService: AuthorsServiceProtocol { get } 10 | } 11 | 12 | public protocol AuthorsServiceProtocol { 13 | func fetchList() -> Promise 14 | func fetchAuthor(with metaData: AuthorMetaData) -> Promise 15 | func avatar(of author: AuthorMetaData) -> URL? 16 | } 17 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Domain/Services/ConferencesServiceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import DataModels 6 | import PromiseKit 7 | 8 | public protocol HasConferencesService { 9 | var conferencesService: ConferencesServiceProtocol { get } 10 | } 11 | 12 | public protocol ConferencesServiceProtocol { 13 | func fetchList() -> Promise<[ConferenceMetaData]> 14 | func fetchVideos(conferenceMetaData: ConferenceMetaData) -> Promise<[[VideoMetaData]]> 15 | func conference(with metaData: ConferenceMetaData) -> Promise 16 | func bannerImageURL(for conference: ConferenceMetaData) -> URL? 17 | } 18 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Domain/Services/ContentDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | public protocol ContentDataProvider {} 6 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Domain/Services/Git/ConferencesGitService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | public protocol HasConferencesGitService { 8 | var conferencesGitService: ConferencesGitServiceProtocol { get } 9 | } 10 | 11 | public protocol ConferencesGitServiceProtocol: GitServiceProtocol {} 12 | 13 | public class ConferencesGitService: BaseGitService, ConferencesGitServiceProtocol { 14 | 15 | // MARK: Properties 16 | 17 | public lazy var baseContentPath = { 18 | baseLocalRepositoryPath.combinePath("content") 19 | }() 20 | 21 | // MARK: Initialization 22 | 23 | public convenience init(context: ServiceContext) { 24 | let repositoryURL = try! context.configurations.container.resolve(GitRepositoryConfigurationProtocol.self).conferencesRepositoryURL 25 | self.init(context: context, remoteRepositoryURL: repositoryURL) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Domain/Services/VideosServiceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import DataModels 6 | import PromiseKit 7 | 8 | public protocol HasVideosService { 9 | var videosService: VideosServiceProtocol { get } 10 | } 11 | 12 | public protocol VideosServiceProtocol { 13 | func fetchList() -> Promise<[VideoMetaData]> 14 | func fetchList(conference: ConferenceMetaData, edition: ConferenceEdition) -> Promise<[VideoMetaData]> 15 | func fetchVideo(metaData: VideoMetaData) -> Promise 16 | func fetchVideo(page: Int, author: AuthorMetaData) -> Promise<[VideoMetaData]> 17 | func previewImageURL(for video: VideoMetaData) -> URL? 18 | } 19 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Engine/Platform/Services/FilesystemContentProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | /// Protocol defining methods used by all filesystem-based content providers. 8 | public protocol FilesystemContentProvider { 9 | var baseFolderPath: String { get set } 10 | } 11 | 12 | extension FilesystemContentProvider where Self: ContentDataProvider { 13 | 14 | public func decode(_ type: T.Type, from localFileURL: URL) throws -> T { 15 | let jsonDecoder = JSONDecoder() 16 | let fileData = try Data(contentsOf: localFileURL) 17 | let value = try jsonDecoder.decode(T.self, from: fileData) 18 | 19 | return value 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Base/Navigation/ComponentPresentableWrapper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreComponent 6 | import XCoordinator 7 | 8 | /// Wrapper to abstract XCoordinator's specific implementation. 9 | public struct ComponentPresentableWrapper: ComponentPresentable { 10 | 11 | // MARK: Properties 12 | 13 | // Public 14 | 15 | public var presentable: Presentable 16 | 17 | public var viewController: UIViewController! { 18 | return presentable.viewController 19 | } 20 | 21 | // MARK: Initialization 22 | 23 | public init(presentable: Presentable) { 24 | self.presentable = presentable 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Top/Core.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for Core. 8 | FOUNDATION_EXPORT double CoreVersionNumber; 9 | 10 | //! Project version string for Core. 11 | FOUNDATION_EXPORT const unsigned char CoreVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Core/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/View/Authors/Cells/AuthorsCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | public class AuthorsCollectionViewCell: UICollectionViewCell { 8 | 9 | // MARK: Properties 10 | 11 | // IBOutlet 12 | 13 | @IBOutlet public weak var authorView: AuthorView! 14 | } 15 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/View/Authors/Cells/AuthorsCollectionViewFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | class AuthorsCollectionViewFlowLayout: UICollectionViewFlowLayout {} 8 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/View/Videos/Cell/VideosCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import UIKit 7 | 8 | public class VideosCollectionViewCell: UICollectionViewCell, ClassNameDerivable { 9 | 10 | // MARK: Properties 11 | 12 | // IBOutlet 13 | 14 | @IBOutlet public weak var videoView: VideoView! 15 | } 16 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/View/Videos/Cell/VideosCollectionViewFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | class VideosCollectionViewFlowLayout: UICollectionViewFlowLayout { 8 | } 9 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/View/Videos/Cell/VideosTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import UIKit 7 | 8 | public class VideosTableViewCell: UITableViewCell, ClassNameDerivable { 9 | 10 | // MARK: Properties 11 | 12 | // IBOutlet 13 | 14 | @IBOutlet public weak var videoView: VideoView! 15 | } 16 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Base/ViewController/Markdown/MarkdownViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreComponent 6 | import SuperArcCoreUI 7 | import SuperArcCore 8 | 9 | public protocol MarkdownViewModelProtocol { 10 | var resourceURL: URL? { get set } 11 | func loadContent() -> String? 12 | } 13 | 14 | extension MarkdownViewModelProtocol { 15 | 16 | public func loadContent() -> String? { 17 | if let url = resourceURL { 18 | return try? String(contentsOf: url, encoding: .utf8) 19 | } 20 | 21 | return nil 22 | } 23 | } 24 | 25 | open class MarkdownViewModel: ViewModel, MarkdownViewModelProtocol { 26 | 27 | // MARK: Properties 28 | 29 | // Public 30 | 31 | public var resourceURL: URL? 32 | 33 | // MARK: Initialization 34 | 35 | public init(resourceURL: URL?) { 36 | self.resourceURL = resourceURL 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/author_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "author_default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/author_default.imageset/author_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/author_default.imageset/author_default.png -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/video_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "video_default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/video_default.imageset/video_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/CoreUX/Sources/Resources/Assets.xcassets/video_default.imageset/video_default.png -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Top/CoreUI.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for CoreUI. 8 | FOUNDATION_EXPORT double CoreUIVersionNumber; 9 | 10 | //! Project version string for CoreUI. 11 | FOUNDATION_EXPORT const unsigned char CoreUIVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/CoreUX/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/DataModel/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "DataModel", 8 | dependencies: [ 9 | // Dependencies declare other packages that this package depends on. 10 | // .package(url: /* package url */, from: "1.0.0"), 11 | ], 12 | targets: [ 13 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 14 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 15 | .target( 16 | name: "DataModel", 17 | dependencies: []), 18 | ] 19 | ) 20 | -------------------------------------------------------------------------------- /SwiftCommunity/DataModel/Sources/Base/Models/Conference.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public typealias ConferenceID = String 8 | 9 | public typealias ConferencesList = [ConferenceMetaData] 10 | 11 | public struct ConferenceMetaData: Codable { 12 | public let id: ConferenceID 13 | public let name: String 14 | } 15 | 16 | public struct ConferenceEdition: Codable { 17 | public let year: Int 18 | } 19 | 20 | public struct ConferenceDetail: Codable { 21 | public let meta: ConferenceMetaData 22 | public let editions: [ConferenceEdition] 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/DataModel/Sources/Base/Models/ModelCodingError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | public enum ModelCodingError: Error { 8 | case unknownValue 9 | } 10 | -------------------------------------------------------------------------------- /SwiftCommunity/DataModel/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/DataModel/Sources/Top/SwiftVideosDataModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for DataModels. 8 | FOUNDATION_EXPORT double DataModelsVersionNumber; 9 | 10 | //! Project version string for DataModels. 11 | FOUNDATION_EXPORT const unsigned char DataModelsVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/Base/Engine/Platform/MarkdownProcessor/MarkdownProcessor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | protocol MarkdownProcessorProtocol { 8 | func process(_ markdown: String) -> String 9 | } 10 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/Base/UI/Scenes/Content/View/SectionTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import UIKit 7 | 8 | class SectionTableViewCell: UITableViewCell, ClassNameDerivable { 9 | 10 | @IBOutlet weak var titleLabel: UILabel! 11 | 12 | var section: Section? { 13 | didSet { 14 | titleLabel.text = section?.title 15 | } 16 | } 17 | 18 | override func prepareForReuse() { 19 | super.prepareForReuse() 20 | 21 | section = nil 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/Base/UI/Scenes/Content/ViewModel/ContentViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcFoundation 7 | import PromiseKit 8 | 9 | class ContentViewModel: ViewModel { 10 | 11 | // MARK: Properties 12 | 13 | let content: Content 14 | let algorithmService: AlgorithmService 15 | 16 | // MARK: Initialization 17 | 18 | init(content: Content, algorithmService: AlgorithmService) { 19 | self.content = content 20 | self.algorithmService = algorithmService 21 | } 22 | 23 | func load() -> Promise { 24 | switch content { 25 | case .local(_, let value): 26 | return Promise.value(value) 27 | case .url(_, let path): 28 | return loadContent(from: path) 29 | } 30 | } 31 | 32 | // MARK: Private helpers 33 | 34 | private func loadContent(from path: String) -> Promise { 35 | return algorithmService.loadContent(from: path) 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/Base/UI/Scenes/Content/ViewModel/Models+RxDataSources.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import RxDataSources 7 | 8 | enum AlgorithmSectionDataModel { 9 | case content(ContentViewModel) 10 | case section(Section) 11 | } 12 | 13 | struct AlgorithmSectionModel { 14 | public var items: [AlgorithmSectionDataModel] 15 | } 16 | 17 | extension AlgorithmSectionModel: SectionModelType { 18 | 19 | init(original: AlgorithmSectionModel, items: [AlgorithmSectionDataModel]) { 20 | self = original 21 | self.items = items 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/SupportingFiles/Algorithm.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for Algorithm. 8 | FOUNDATION_EXPORT double AlgorithmVersionNumber; 9 | 10 | //! Project version string for Algorithm. 11 | FOUNDATION_EXPORT const unsigned char AlgorithmVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Sources/Top/AlgorithmDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import SuperArcCore 7 | 8 | public typealias AlgorithmDependency = HasServiceContext & HasConferencesGitService 9 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Algorithm/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Base/UI/Components/Detail/View/AuthorAvatarTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import Core 7 | import SuperArcFoundation 8 | import UIKit 9 | 10 | public class AuthorAvatarTableViewCell: UITableViewCell, ClassNameDerivable { 11 | 12 | @IBOutlet public weak var authorView: AuthorView! 13 | } 14 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Base/UI/Components/Detail/View/AuthorResourcesTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | import UIKit 7 | 8 | class AuthorResourcesTableViewCell: UITableViewCell, ClassNameDerivable { 9 | 10 | @IBOutlet weak var typeLabel: UILabel! 11 | @IBOutlet weak var valueLabel: UILabel! 12 | 13 | } 14 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Base/UI/Navigation/AuthorsInterfaceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import DataModels 7 | import SuperArcCoreComponent 8 | import SuperArcCoreUI 9 | import SuperArcCore 10 | import XCoordinator 11 | 12 | public protocol AuthorsInterfaceProtocol: OnDemandInterface { 13 | func showAuthor(authorMetaData: AuthorMetaData, dependency: AuthorsDependency, anyAuthorsRouter: AnyComponentRouter) -> Presentable 14 | } 15 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Resources/Assets.xcassets/author_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "author_default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Resources/Assets.xcassets/author_default.imageset/author_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/Features/Authors/Sources/Resources/Assets.xcassets/author_default.imageset/author_default.png -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Top/Authors.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for Authors. 8 | FOUNDATION_EXPORT double AuthorsVersionNumber; 9 | 10 | //! Project version string for Authors. 11 | FOUNDATION_EXPORT const unsigned char AuthorsVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Authors/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Base/ConferenceView/ConferenceView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcFoundation 7 | 8 | @IBDesignable class ConferenceView: View, ClassNameDerivable { 9 | 10 | // MARK: Properties 11 | 12 | // IBOutlet 13 | 14 | @IBOutlet weak var titleLabel: UILabel! 15 | @IBOutlet weak var previewImageView: UIImageView! 16 | @IBOutlet weak var backgroundView: UIView! 17 | 18 | // Private 19 | 20 | var viewModel: ConferenceViewModel! { 21 | didSet { 22 | titleLabel.text = viewModel.name 23 | titleLabel.isHidden = true 24 | previewImageView.image = viewModel.bannerImage 25 | } 26 | } 27 | 28 | // MARK: Setup 29 | 30 | override func setup() { 31 | if let conferenceView = ConferenceView.instantiateFromNib(owner: self) { 32 | addAndStretchSubView(conferenceView) 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Components/Detail/View/ConferenceDetailCollectionViewFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | class ConferenceDetailCollectionViewFlowLayout: UICollectionViewFlowLayout {} 8 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Components/Detail/View/SectionHeader/ConferenceDetailSectionHeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcFoundation 7 | 8 | class ConferenceDetailSectionHeaderView: UICollectionReusableView, ClassNameDerivable { 9 | 10 | @IBOutlet weak var titleLabel: UILabel! 11 | } 12 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Components/Detail/ViewModel/Models+RxDataSources.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import RxDataSources 7 | 8 | public enum ConferenceDetailSectionDataModel { 9 | case authors([AuthorViewModel]) 10 | case video(VideoViewModel) 11 | } 12 | 13 | public struct ConferenceDetailSectionModel { 14 | public var items: [ConferenceDetailSectionDataModel] 15 | } 16 | 17 | extension ConferenceDetailSectionModel: SectionModelType { 18 | 19 | public init(original: ConferenceDetailSectionModel, items: [ConferenceDetailSectionDataModel]) { 20 | self = original 21 | self.items = items 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Components/List/View/ConferenceCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | class ConferenceCollectionViewCell: UICollectionViewCell { 8 | 9 | // MARK: Properties 10 | 11 | // IBOutlets 12 | 13 | @IBOutlet weak var conferenceView: ConferenceView! 14 | 15 | func resetTransform() { 16 | transform = .identity 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Base/UI/Components/List/View/ConferenceCollectionViewFlowLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | class ConferenceCollectionViewFlowLayout: UICollectionViewFlowLayout {} 8 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Resources/Assets.xcassets/video_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "video_default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Resources/Assets.xcassets/video_default.imageset/video_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/Features/Conferences/Sources/Resources/Assets.xcassets/video_default.imageset/video_default.png -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Supporting Files/Conferences.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for Conferences. 8 | FOUNDATION_EXPORT double ConferencesVersionNumber; 9 | 10 | //! Project version string for Conferences. 11 | FOUNDATION_EXPORT const unsigned char ConferencesVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Sources/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Conferences/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Videos/Sources/Base/UI/Navigation/VideosInterfaceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import DataModels 7 | import SuperArcCoreComponent 8 | import SuperArcCore 9 | import XCoordinator 10 | 11 | public protocol VideosInterfaceProtocol: OnDemandInterface { 12 | func showVideo(conferenceMetaData: ConferenceMetaData, conferenceEdition: ConferenceEdition, dependency: VideosDependency, router: AnyComponentRouter) -> Presentable 13 | func showVideo(videoMetaData: VideoMetaData, dependency: VideosDependency, router: AnyComponentRouter) -> Presentable 14 | } 15 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Videos/Sources/Top/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Videos/Sources/Top/Videos.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | #import 6 | 7 | //! Project version number for Videos. 8 | FOUNDATION_EXPORT double VideosVersionNumber; 9 | 10 | //! Project version string for Videos. 11 | FOUNDATION_EXPORT const unsigned char VideosVersionString[]; 12 | 13 | // In this header, you should import all the public headers of your framework using statements like #import 14 | 15 | 16 | -------------------------------------------------------------------------------- /SwiftCommunity/Features/Videos/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "SwiftCommunity", 8 | dependencies: [ 9 | // Dependencies declare other packages that this package depends on. 10 | // .package(url: /* package url */, from: "1.0.0"), 11 | ], 12 | targets: [ 13 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 14 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 15 | .target( 16 | name: "SwiftCommunity", 17 | dependencies: []), 18 | .testTarget( 19 | name: "SwiftCommunityTests", 20 | dependencies: ["SwiftCommunity"]), 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import UIKit 6 | 7 | public struct Constants { 8 | 9 | public struct UI { 10 | static public let defaultRowHeight: CGFloat = 44.0 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Engine/Configuration/ConfigurationRegistry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import SuperArcCore 7 | import SuperArcNetwork 8 | import SuperArcFoundation 9 | 10 | // Move this to SuperArcCore as standard ConfigurationsRegistry. 11 | public class ConfigurationsRegistry: Registry { 12 | 13 | // MARK: Properties 14 | 15 | // Internal 16 | 17 | public var container: Container 18 | 19 | // Private 20 | 21 | private var endpoint: Endpoint 22 | 23 | // MARK: Initialization 24 | 25 | public init(endpoint: Endpoint) { 26 | self.endpoint = endpoint 27 | container = Container() 28 | 29 | setup() 30 | } 31 | 32 | // MARK: Private helpers 33 | 34 | private func setup() { 35 | register(GitRepositoryConfiguration(endpoint: endpoint), for: GitRepositoryConfigurationProtocol.self) 36 | register(OpenConferenceConfiguration(endpoint: endpoint), for: ServerConfiguration.self) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Engine/Configuration/Endpoint+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcFoundation 6 | 7 | extension Endpoint { 8 | static var current: Endpoint { 9 | #if DEBUG 10 | return .development 11 | #else 12 | return .production 13 | #endif 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Engine/Configuration/GitRepositoryConfiguration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import SuperArcFoundation 7 | 8 | struct GitRepositoryConfiguration: GitRepositoryConfigurationProtocol { 9 | 10 | // MARK: Properties 11 | 12 | var endpoint: Endpoint 13 | 14 | // MARK: Initialization 15 | 16 | init(endpoint: Endpoint) { 17 | self.endpoint = endpoint 18 | } 19 | 20 | // MARK: APIs 21 | 22 | var conferencesRepositoryURL: URL { 23 | return URL(string: "https://github.com/superarcswift/SwiftCommunityContent")! 24 | } 25 | 26 | var algorithmRepositoryURL: URL { 27 | return URL(string: "https://github.com/raywenderlich/swift-algorithm-club")! 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Engine/Configuration/JSONServerConfiguration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcNetwork 6 | import SuperArcFoundation 7 | 8 | struct OpenConferenceConfiguration: ServerConfiguration { 9 | 10 | // MARK: Properties 11 | 12 | let endpoint: Endpoint 13 | 14 | // MARK: Initialization 15 | 16 | init(endpoint: Endpoint) { 17 | self.endpoint = endpoint 18 | } 19 | 20 | var baseURL: URL { 21 | return URL(string: "https://raw.githubusercontent.com/tech-conferences/conference-data/master/conferences/")! 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/Engine/DataAccess/OpenConferences/Interface/OpenConferenceIterface.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcNetwork 6 | import PromiseKit 7 | 8 | extension DirectAccessJSONServer { 9 | 10 | func getOpenConferences(for year: Int) -> Promise<[OpenConference]> { 11 | let request = GetOpenConferencesRequest(httpMethod: .get, components: "\(year.asString)/ios.json".urlComponents) 12 | 13 | return channel.sendRequest(request).then { response -> Promise<[OpenConference]> in 14 | return Promise { resolver in 15 | resolver.fulfill(response.conferences) 16 | } 17 | } 18 | } 19 | } 20 | 21 | class GetOpenConferencesRequest: JSONRequest {} 22 | 23 | class GetOpenConferencesResponse: JSONResponse { 24 | 25 | let conferences: [OpenConference] 26 | 27 | required init(from decoder: Decoder) throws { 28 | conferences = try [OpenConference](from: decoder) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Base/UI/Animation/Animation+Fade.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCoordinator 6 | import UIKit 7 | 8 | extension Animation { 9 | static let fade = Animation( 10 | presentation: InteractiveTransitionAnimation.fade, 11 | dismissal: InteractiveTransitionAnimation.fade 12 | ) 13 | } 14 | 15 | extension InteractiveTransitionAnimation { 16 | fileprivate static let fade = InteractiveTransitionAnimation(duration: 0.3) { transitionContext in 17 | let containerView = transitionContext.containerView 18 | let toView = transitionContext.view(forKey: .to)! 19 | 20 | toView.alpha = 0.0 21 | containerView.addSubview(toView) 22 | 23 | UIView.animate(withDuration: 0.3, delay: 0, options: [.curveLinear], animations: { 24 | toView.alpha = 1.0 25 | }, completion: { _ in 26 | transitionContext.completeTransition(!transitionContext.transitionWasCancelled) 27 | }) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Scenes/More/About/ViewController/AboutViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import SuperArcCoreUI 7 | 8 | class AboutViewController: MarkdownViewController, StoryboardInitiable { 9 | 10 | // MARK: Properties 11 | 12 | // Static 13 | 14 | static var storyboardName = "More" 15 | } 16 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Scenes/More/Licenses/ViewController/LicensesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import SuperArcCoreUI 7 | 8 | class LicensesViewController: MarkdownViewController, StoryboardInitiable { 9 | 10 | // MARK: Properties 11 | 12 | // Static 13 | 14 | static var storyboardName = "More" 15 | } 16 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Scenes/More/OpenConferences/UI/OpenConferencesDependency.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import SuperArcCore 6 | 7 | public typealias OpenConferencesDependency = HasEngine 8 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Scenes/More/OpenConferences/UI/ViewModel/Models+RxDataSources.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CoreUX 6 | import RxDataSources 7 | 8 | public struct OpenConferenceSectionModel { 9 | public var year: Int 10 | public var items: [OpenConference] 11 | } 12 | 13 | extension OpenConferenceSectionModel: SectionModelType { 14 | 15 | public init(original: OpenConferenceSectionModel, items: [OpenConference]) { 16 | self = original 17 | self.items = items 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Top/AppComponent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import SuperArcCoreComponent 7 | import SuperArcCoreUI 8 | import SuperArcCore 9 | import SuperArcFoundation 10 | 11 | class AppComponent: Component {} 12 | 13 | extension AppComponent: HasConferencesGitService { 14 | 15 | var conferencesGitService: ConferencesGitServiceProtocol { 16 | return dependencyProvider.context.engine.serviceRegistry.resolve(type: ConferencesGitServiceProtocol.self) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Top/ComponentsRouter/ComponentsRouter+Dependencies.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Core 6 | import SuperArcCoreComponent 7 | import SuperArcCore 8 | 9 | // MARK: - Dependencies 10 | 11 | extension Navigator: HasVideosService { 12 | 13 | public var videosService: VideosServiceProtocol { 14 | return context.engine.serviceRegistry.resolve(type: VideosServiceProtocol.self) 15 | } 16 | } 17 | 18 | extension Navigator: HasAuthorsService { 19 | 20 | public var authorsService: AuthorsServiceProtocol { 21 | return context.engine.serviceRegistry.resolve(type: AuthorsServiceProtocol.self) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Top/ComponentsRouter/ComponentsRouter+Interfaces.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Videos 6 | import Authors 7 | import SuperArcCoreComponent 8 | 9 | extension Navigator { 10 | 11 | var videosInterface: VideosInterface { 12 | return interfaceRegistry.resolveOnDemand(type: VideosInterface.self) 13 | } 14 | 15 | var authorsInterface: AuthorsInterface { 16 | return interfaceRegistry.resolveOnDemand(type: AuthorsInterface.self) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Application/Top/ComponentsRouter/Router/ComponentsRouter+Routers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Conferences 6 | import Videos 7 | import Authors 8 | import SuperArcCoreComponent 9 | 10 | extension Navigator { 11 | 12 | var conferencesRouter: AnyComponentRouter { 13 | return routerRegistry.resolve(type: ConferencesComponentRouter.self).anyConferencesRouter 14 | } 15 | 16 | var videosRouter: AnyComponentRouter { 17 | return routerRegistry.resolve(type: VideosComponentRouter.self).anyVideosRouter 18 | } 19 | 20 | var authorsRouter: AnyComponentRouter { 21 | return routerRegistry.resolve(type: AuthorsComponentRouter.self).anyAuthorsRouter 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-44@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-44@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x-1.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Logo100-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Logo100-1.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Logo216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Logo216.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Default/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Default/author_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "author_default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Default/author_default.imageset/author_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Default/author_default.imageset/author_default.png -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/authors.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "authors.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/authors.imageset/authors.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/authors.imageset/authors.pdf -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/conferences.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "conference.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/conferences.imageset/conference.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/conferences.imageset/conference.pdf -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/more.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "more.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/more.imageset/more.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/more.imageset/more.pdf -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/videos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "videos.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/videos.imageset/videos.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Assets.xcassets/Tabbar/videos.imageset/videos.pdf -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "conferences" = "Conferences"; 2 | "swift_algorithm_club" = "Swift Algorithm Club"; 3 | "videos" = "Videos"; 4 | "authors" = "Authors"; 5 | "more" = "More"; 6 | "about" = "About"; 7 | "content_licenses" = "Licenses"; 8 | "acknowledgements" = "Acknowledgements"; 9 | "send_feedbacks" = "Send feedbacks"; 10 | "update_database" = "Update database"; 11 | "reset" = "Reset"; 12 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Settings.bundle/Root.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | StringsTable 6 | Root 7 | PreferenceSpecifiers 8 | 9 | 10 | Type 11 | PSChildPaneSpecifier 12 | Title 13 | Licenses 14 | File 15 | com.mono0926.LicensePlist 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/Settings.bundle/en.lproj/Root.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/SwiftCommunity/SwiftCommunity/Sources/Resources/Settings.bundle/en.lproj/Root.strings -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/ar.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "conferences" = "المؤتمرات"; 2 | "swift_algorithm_club" = "نادي خوارزميات Swift"; 3 | "videos" = "الفيديوات"; 4 | "authors" = "المؤلفون"; 5 | "more" = "المزيد"; 6 | "about" = "حول"; 7 | "content_licenses" = "التراخيص"; 8 | "acknowledgements" = "شكر وتقدير"; 9 | "send_feedbacks" = "قيم التطبيق"; 10 | "update_database" = "تحديث قاعدة البيانات"; 11 | "reset" = "إعادة تعيين التطبيق"; 12 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/de.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "conferences" = "Konferenzen"; 2 | "swift_algorithm_club" = "Swift Algorithm Club"; 3 | "videos" = "Videos"; 4 | "authors" = "Autoren"; 5 | "more" = "Mehr"; 6 | "about" = "Über"; 7 | "content_licenses" = "Lizenzen"; 8 | "acknowledgements" = "Danksagung"; 9 | "send_feedbacks" = "Feedback"; 10 | "update_database" = "Datenbank aktualisieren"; 11 | "reset" = "Zurücksetzen"; 12 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/vi-VN.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/Sources/Resources/vi-VN.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "conferences" = "Hội thảo"; 2 | "swift_algorithm_club" = "Câu lạc bộ thuật toán"; 3 | "videos" = "Phim"; 4 | "authors" = "Diễn giả"; 5 | "more" = "Khác"; 6 | "about" = "Giới thiệu"; 7 | "content_licenses" = "Bản quyền nội dung"; 8 | "acknowledgements" = "Cảm ơn"; 9 | "send_feedbacks" = "Góp ý"; 10 | "update_database" = "Cập nhật dữ liệu"; 11 | "reset" = "Thiết lập lại"; 12 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/SwiftCommunity.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/SwiftCommunity.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/Pages/AuthorsPage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | class AuthorsPage: PageObject { 8 | 9 | var loadedElement: XCUIElement { 10 | return XCUIApplication().navigationBars["Authors"].staticTexts["Authors"] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/Pages/ConferencesPage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | class ConferencesPage: PageObject { 8 | 9 | var loadedElement: XCUIElement { 10 | return XCUIApplication().navigationBars["Conferences"].staticTexts["Conferences"] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/Pages/PageObject.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | protocol PageObject { 8 | 9 | var loadedElement: XCUIElement { get } 10 | 11 | var isLoaded: Bool { get } 12 | 13 | static func terminate() 14 | 15 | } 16 | 17 | extension PageObject { 18 | 19 | var isLoaded: Bool { 20 | return loadedElement.isDisplayed 21 | } 22 | 23 | static func terminate() { 24 | XCUIApplication().terminate() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/Pages/VideosPage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | class VideosPage: PageObject { 8 | 9 | var loadedElement: XCUIElement { 10 | return XCUIApplication().navigationBars["Videos"].staticTexts["Videos"] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/Runtime/XCUIElement+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | extension XCUIElement { 8 | var isDisplayed: Bool { 9 | return self.exists && self.isHittable 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Base/TestCase/UITestCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | protocol PageTestable { 8 | associatedtype PageType: PageObject 9 | 10 | var page: PageType! { get set } 11 | } 12 | 13 | protocol PageSnapshotable {} 14 | 15 | class UITestCase: XCTestCase { 16 | 17 | enum TimeOut: Double { 18 | case short = 2 19 | case long = 10 20 | } 21 | 22 | let app = XCUIApplication() 23 | 24 | // MARK: Setup 25 | 26 | override func setUp() { 27 | super.setUp() 28 | 29 | continueAfterFailure = false 30 | 31 | if self is PageSnapshotable { 32 | setupSnapshot(app) 33 | } 34 | app.launch() 35 | 36 | navigateToPage() 37 | } 38 | 39 | override func tearDown() { 40 | super.tearDown() 41 | } 42 | 43 | // MARK: APIs 44 | 45 | func navigateToPage() { 46 | fatalError("needed to be plemented") 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Tests/AuthorsPageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | import Quick 7 | import Nimble 8 | 9 | class AuthorsPageTests: UITestCase, PageTestable, PageSnapshotable { 10 | 11 | // MARK: Properties 12 | 13 | var page: AuthorsPage! 14 | 15 | // MARK: Setup 16 | 17 | override func setUp() { 18 | super.setUp() 19 | page = AuthorsPage() 20 | } 21 | 22 | override func tearDown() { 23 | page = nil 24 | super.tearDown() 25 | } 26 | 27 | override func navigateToPage() { 28 | app.tabBars.buttons["Authors"].tap() 29 | } 30 | 31 | // MARK: Tests 32 | 33 | func testPageIsLoaded() { 34 | expect(self.page.isLoaded).toEventually(beTrue()) 35 | snapshot("03_AuthorsScreen") 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Tests/ConferencesPageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | import Quick 7 | import Nimble 8 | 9 | class ConferencesPageTests: UITestCase, PageTestable, PageSnapshotable { 10 | 11 | var page: ConferencesPage! 12 | 13 | override func setUp() { 14 | super.setUp() 15 | page = ConferencesPage() 16 | } 17 | 18 | override func tearDown() { 19 | page = nil 20 | super.tearDown() 21 | } 22 | 23 | override func navigateToPage() {} 24 | 25 | // MARK: Tests 26 | 27 | func testPageIsLoaded() { 28 | expect(self.page.isLoaded).toEventually(beTrue()) 29 | snapshot("01_ConferencesScreen") 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UITests/Tests/VideosPageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | import Quick 7 | import Nimble 8 | 9 | class VideosPageTests: UITestCase, PageTestable, PageSnapshotable { 10 | 11 | // MARK: Properties 12 | 13 | var page: VideosPage! 14 | 15 | // MARK: Setup 16 | 17 | override func setUp() { 18 | super.setUp() 19 | page = VideosPage() 20 | } 21 | 22 | override func tearDown() { 23 | page = nil 24 | super.tearDown() 25 | } 26 | 27 | override func navigateToPage() { 28 | app.tabBars.buttons["Videos"].tap() 29 | } 30 | 31 | // MARK: Tests 32 | 33 | func testPageIsLoaded() { 34 | expect(self.page.isLoaded).toEventually(beTrue()) 35 | snapshot("02_VideosScreen") 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UnitTests/Base/TestCase/UnitTestCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import XCTest 6 | 7 | class UnitTestCase: XCTestCase { 8 | struct Timeout { 9 | static let short: TimeInterval = 1.0 10 | static let long: TimeInterval = 5.0 11 | static let debug: TimeInterval = 700 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftCommunity/SwiftCommunity/UnitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tools/Bootstrap/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | -------------------------------------------------------------------------------- /Tools/Bootstrap/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "Files", 6 | "repositoryURL": "https://github.com/JohnSundell/Files", 7 | "state": { 8 | "branch": null, 9 | "revision": "92b57bea0e737e7d92b5ff281f46ec2b59faf91c", 10 | "version": "3.1.0" 11 | } 12 | }, 13 | { 14 | "package": "Rainbow", 15 | "repositoryURL": "https://github.com/onevcat/Rainbow", 16 | "state": { 17 | "branch": null, 18 | "revision": "9c52c1952e9b2305d4507cf473392ac2d7c9b155", 19 | "version": "3.1.5" 20 | } 21 | }, 22 | { 23 | "package": "SwiftShell", 24 | "repositoryURL": "https://github.com/kareman/SwiftShell", 25 | "state": { 26 | "branch": null, 27 | "revision": "2614f86520e66e19328f11b00dabd474209e82f7", 28 | "version": "5.0.0" 29 | } 30 | } 31 | ] 32 | }, 33 | "version": 1 34 | } 35 | -------------------------------------------------------------------------------- /Tools/Bootstrap/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "Bootstrap", 8 | platforms: [.macOS(.v10_13)], 9 | dependencies: [ 10 | .package(url: "https://github.com/kareman/SwiftShell", from: "5.0.0"), 11 | .package(url: "https://github.com/onevcat/Rainbow", from: "3.0.0"), 12 | .package(url: "https://github.com/JohnSundell/Files", from: "3.0.0") 13 | ], 14 | targets: [ 15 | .target( 16 | name: "Bootstrap", 17 | dependencies: ["SwiftShell", "Rainbow", "Files"], 18 | path: "."), 19 | ] 20 | ) 21 | -------------------------------------------------------------------------------- /Tools/Bootstrap/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 2 | 3 | A description of this package. 4 | -------------------------------------------------------------------------------- /Tools/Bootstrap/Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import BootstrapTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += BootstrapTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tools/DangerExtensions/SigningSettingsCheck.swift: -------------------------------------------------------------------------------- 1 | func checkChangingSigningSettings() { 2 | let changedFiles = danger.git.createdFiles + danger.git.modifiedFiles 3 | let projectFiles = changedFiles.filter { $0.fileType == .pbxproj} 4 | guard projectFiles.count == 0 else { 5 | return 6 | } 7 | 8 | for projectFile in projectFiles { 9 | warn("You have changed project file `\(projectFile)`. Are you sure?") 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tools/DangerExtensions/UnitTestsCheck.swift: -------------------------------------------------------------------------------- 1 | func checkHavingTests(for type: String) { 2 | let createdFiles = danger.git.createdFiles 3 | let viewModels = createdFiles.filter { $0.hasSuffix("\(type).swift") } 4 | let viewModelTests = createdFiles.filter { $0.hasSuffix("\(type)Tests.swift") } 5 | for viewModel in viewModels { 6 | // Check if the file doesn't require test 7 | let isRequiredTest = !danger.utils.readFile(viewModel).contains("// danger:notest") 8 | guard isRequiredTest else { 9 | return 10 | } 11 | 12 | let baseViewModelFileName = ((viewModel as NSString).lastPathComponent as NSString).deletingPathExtension 13 | let foundTest = viewModelTests.filter { (($0 as NSString).lastPathComponent as NSString).deletingPathExtension.hasPrefix(baseViewModelFileName) } 14 | guard foundTest.count == 0 else { 15 | return 16 | } 17 | warn("You have created `\(viewModel)` but there is no test `\(baseViewModelFileName)Tests.swift` found.") 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Tools/LicensesManager/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | -------------------------------------------------------------------------------- /Tools/LicensesManager/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "LicensesManager", 8 | dependencies: [ 9 | .package(url: "https://github.com/JohnSundell/Files.git", from: "3.1.0"), 10 | .package(url: "https://github.com/mtynior/ColorizeSwift.git", .branch("master")), 11 | .package(url: "https://github.com/eneko/CommandRegistry.git", from: "0.0.1"), 12 | .package(url: "https://github.com/apple/swift-package-manager.git", from: "0.1.0"), 13 | ], 14 | targets: [ 15 | .target( 16 | name: "LicensesManager", 17 | dependencies: ["Files", "ColorizeSwift", "CommandRegistry", "SwiftPM"], 18 | path: ".") 19 | ] 20 | ) 21 | -------------------------------------------------------------------------------- /Tools/LicensesManager/README.md: -------------------------------------------------------------------------------- 1 | # LicensesManager 2 | 3 | A description of this package. 4 | -------------------------------------------------------------------------------- /Tools/LicensesManager/Sources/LicensesManager/Base/Commands/Carthage/CarthageCommand.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import CommandRegistry 6 | import SPMUtility 7 | import ColorizeSwift 8 | import Foundation 9 | 10 | class CarthageCommand: Command { 11 | 12 | // MARK: Properties 13 | 14 | // Static 15 | 16 | let command = "carthage" 17 | let overview = "Managing licenses of 3rd party library installed using Carthage." 18 | 19 | // Private 20 | 21 | let subparser: ArgumentParser 22 | var subcommands: [Command] = [] 23 | 24 | // MARK: Initialization 25 | 26 | required init(parser: ArgumentParser) { 27 | subparser = parser.add(subparser: command, overview: overview) 28 | } 29 | 30 | // MARK: APIs 31 | 32 | func run(with arguments: ArgumentParser.Result) throws { 33 | print("[Error] carthage: build".red()) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Tools/LicensesManager/Sources/LicensesManager/Base/Utils/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | import Foundation 6 | 7 | extension String { 8 | 9 | public func combinePath(_ component: String) -> String { 10 | return NSString(string: self).appendingPathComponent(component) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tools/LicensesManager/Sources/LicensesManager/Top/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright © 2019 An Tran. All rights reserved. 3 | // 4 | 5 | // swift run LicensesManager carthage generate "/Users/atran/Desktop/Projects/iOS/SwiftVideos" 6 | 7 | let tool = CommlandLineTool() 8 | tool.run() 9 | -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/Component.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/Component.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/Component.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/Component.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/Component.xctemplate/___FILEBASENAME___.swift: -------------------------------------------------------------------------------- 1 | // 2 | //___COPYRIGHT___ 3 | // 4 | 5 | import SuperArcCoreComponent 6 | import SuperArcCoreUI 7 | import SuperArcCore 8 | import SuperArcFoundation 9 | import XCoordinator 10 | 11 | /// Protocol defining all dependencies required by this component. 12 | typealias VideosDependency = HasVideosService 13 | 14 | class ___FILEBASENAMEASIDENTIFIER___: Component, VideosBuilder { 15 | 16 | // MARK: Properties 17 | 18 | // Static 19 | 20 | // IBOutlets 21 | 22 | // Public 23 | 24 | // Private 25 | 26 | // MARK: Setup 27 | 28 | override func setupViews() { 29 | super.setupViews() 30 | } 31 | 32 | override func setupBindings() { 33 | super.setupBindings() 34 | } 35 | 36 | // MARK: Private helpers 37 | } 38 | -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/CoordinatedDIViewModel.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/CoordinatedDIViewModel.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/CoordinatedDIViewModel.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/CoordinatedDIViewModel.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/CoordinatedDIViewModel.xctemplate/TemplateInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Kind 6 | Xcode.IDEFoundation.TextSubstitutionFileTemplateKind 7 | Description 8 | A SuperArc ViewModel containing dependency and coordinator. 9 | Summary 10 | A SuperArc ViewModel containing dependency and coordinator. 11 | SortOrder 12 | 30 13 | AllowedTypes 14 | 15 | public.swift-source 16 | 17 | DefaultCompletionName 18 | File 19 | MainTemplateFile 20 | ___FILEBASENAME___.swift 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/ViewController.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/ViewController.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/ViewController.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/Xcode-Templates/SuperArc/ViewController.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Tools/Xcode-Templates/SuperArc/ViewController.xctemplate/___FILEBASENAME___.swift: -------------------------------------------------------------------------------- 1 | // 2 | //___COPYRIGHT___ 3 | // 4 | 5 | import SuperArcCoreUI 6 | import SuperArcCore 7 | import SuperArcFoundation 8 | import RxSwift 9 | import UIKit 10 | 11 | class ___FILEBASENAMEASIDENTIFIER___: ViewController<___VARIABLE_ViewModel___> { 12 | 13 | // MARK: Properties 14 | 15 | // Static 16 | 17 | // IBOutlets 18 | 19 | // Public 20 | 21 | // Private 22 | 23 | // MARK: Setup 24 | 25 | override func setupViews() { 26 | super.setupViews() 27 | } 28 | 29 | override func setupBindings() { 30 | super.setupBindings() 31 | } 32 | 33 | // MARK: Private helpers 34 | } 35 | -------------------------------------------------------------------------------- /Tools/build_landingpage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | directory=_site 4 | branch=gh-pages 5 | build_command() { 6 | bundler exec jekyll build 7 | } 8 | 9 | pushd "web/landingpage" 10 | 11 | echo -e "\033[0;32mDeleting old content...\033[0m" 12 | rm -rf $directory 13 | 14 | echo -e "\033[0;32mChecking out $branch....\033[0m" 15 | git worktree add $directory $branch 16 | 17 | echo -e "\033[0;32mGenerating site...\033[0m" 18 | build_command 19 | 20 | echo -e "\033[0;32mDeploying $branch branch...\033[0m" 21 | pushd $directory 22 | git add --all 23 | git commit -m "Deploy updates" 24 | git push origin $branch 25 | popd 26 | 27 | echo -e "\033[0;32mCleaning up...\033[0m" 28 | git worktree remove $directory 29 | 30 | popd -------------------------------------------------------------------------------- /Tools/install_templates.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "=== installing Templates ===" 4 | 5 | pushd `dirname $0` 6 | cp -r `pwd`/Xcode-Templates/SuperArc ~/Library/Developer/Xcode/Templates/File\ Templates 7 | popd 8 | 9 | echo "=== done ===" 10 | -------------------------------------------------------------------------------- /Tools/license-plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/Tools/license-plist -------------------------------------------------------------------------------- /Tools/ui_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | xcodebuild test \ 4 | -workspace SwiftCommunity.xcworkspace \ 5 | -scheme SwiftCommunityUITests \ 6 | -configuration DEBUG \ 7 | -destination "platform=iOS Simulator,name=iPhone 11" \ 8 | -derivedDataPath ./.build/DerivedData 9 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | Install _fastlane_ using 12 | ``` 13 | [sudo] gem install fastlane -NV 14 | ``` 15 | or alternatively using `brew cask install fastlane` 16 | 17 | # Available Actions 18 | ## iOS 19 | ### ios tests 20 | ``` 21 | fastlane ios tests 22 | ``` 23 | Push a new beta build to TestFlight 24 | ### ios beta 25 | ``` 26 | fastlane ios beta 27 | ``` 28 | 29 | 30 | ---- 31 | 32 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 33 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 34 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 35 | -------------------------------------------------------------------------------- /fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | # Uncomment the lines below you want to change by removing the # in the beginning 2 | 3 | erase_simulator(true) 4 | 5 | clear_previous_screenshots(true) 6 | 7 | devices([ 8 | "iPhone 11" 9 | ]) 10 | 11 | languages([ 12 | "en-US" 13 | ]) 14 | 15 | scheme("SwiftCommunityUITests") 16 | -------------------------------------------------------------------------------- /web/landingpage/.gitignore: -------------------------------------------------------------------------------- 1 | .bundle 2 | .sass-cache 3 | _site 4 | Gemfile.lock -------------------------------------------------------------------------------- /web/landingpage/CNAME: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /web/landingpage/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | gem 'github-pages' -------------------------------------------------------------------------------- /web/landingpage/_includes/features.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | {% for feature in site.features %} 4 | 5 | {% if feature.title %} 6 |
7 |
8 | 9 | 10 | 11 | 12 |
13 |
14 |

15 | {{ feature.title }} 16 |

17 |

18 | {{ feature.description }} 19 |

20 |
21 |
22 | {% endif %} 23 | 24 | {% endfor %} 25 | 26 |
-------------------------------------------------------------------------------- /web/landingpage/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ site.page_title }} 8 | 9 | 10 | 11 | 12 | 13 | {% if site.enable_smart_app_banner %} 14 | 15 | {% endif %} 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /web/landingpage/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | # Front matter comment to ensure Jekyll properly reads file. 3 | --- 4 | 5 | 6 | 7 | 8 | {% include head.html %} 9 | 10 | 11 |
12 |
13 | {% include header.html %} 14 |
15 | {{ content }} 16 |
17 |
18 | {% include appstoreimages.html %} 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /web/landingpage/_pages/changelog.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: What's New 4 | include_in_header: true 5 | --- 6 | 7 | # Changelog 8 | 9 |
10 | 11 | ### `Pre-release` 12 | 13 | # **Version 1.0.0 (3) - Alpha** 14 | - [Add arabic localisation](https://github.com/superarcswift/SwiftCommunity/pull/141) 15 | - [Fix crash when hitting more/reset](https://github.com/superarcswift/SwiftCommunity/pull/139) 16 | - [Add custom transition for conferences](https://github.com/superarcswift/SwiftCommunity/pull/135) 17 | - [Add swift-algorithm-club](https://github.com/superarcswift/SwiftCommunity/pull/122) 18 | 19 | # **Version 1.0.0 (2) - Alpha** 20 | This is the first public pre-release of Swift Community app. Please send any feedbacks to via [twitter](https://twitter.com/swift_community) -------------------------------------------------------------------------------- /web/landingpage/assets/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/appicon.png -------------------------------------------------------------------------------- /web/landingpage/assets/appstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/appstore.png -------------------------------------------------------------------------------- /web/landingpage/assets/black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/black.png -------------------------------------------------------------------------------- /web/landingpage/assets/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/blue.png -------------------------------------------------------------------------------- /web/landingpage/assets/coral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/coral.png -------------------------------------------------------------------------------- /web/landingpage/assets/headerimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/headerimage.png -------------------------------------------------------------------------------- /web/landingpage/assets/playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/playstore.png -------------------------------------------------------------------------------- /web/landingpage/assets/screenshot/conferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/screenshot/conferences.png -------------------------------------------------------------------------------- /web/landingpage/assets/testflight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/testflight.png -------------------------------------------------------------------------------- /web/landingpage/assets/videos/Place-video-files-here.txt: -------------------------------------------------------------------------------- 1 | Place video files in this folder. 2 | 3 | Formats for Chrome & Firefox: 4 | .webm 5 | .ogg 6 | 7 | Formats for Safari: 8 | .mp4 9 | .mov 10 | 11 | Optimal video resolutions: 12 | 828x1792 13 | 1125x2436 14 | 1242x2688 15 | -------------------------------------------------------------------------------- /web/landingpage/assets/white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/white.png -------------------------------------------------------------------------------- /web/landingpage/assets/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superarcswift/SwiftCommunity/066ce02322bf9708b03022c7b6009d0d38596830/web/landingpage/assets/yellow.png -------------------------------------------------------------------------------- /web/landingpage/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | directory=_site 4 | branch=gh-pages 5 | build_command() { 6 | bundle exec jekyll build 7 | } 8 | 9 | echo -e "\033[0;32mDeleting old content...\033[0m" 10 | rm -rf $directory 11 | 12 | echo -e "\033[0;32mChecking out $branch....\033[0m" 13 | git worktree add $directory $branch 14 | 15 | echo -e "\033[0;32mGenerating site...\033[0m" 16 | build_command 17 | 18 | echo -e "\033[0;32mDeploying $branch branch...\033[0m" 19 | cd $directory && 20 | echo "swiftcommunity.app" > CNAME && 21 | git pull origin $branch && 22 | git add --all && 23 | git commit -m "Deploy updates" && 24 | git push origin $branch 25 | 26 | echo -e "\033[0;32mCleaning up...\033[0m" 27 | git worktree remove $directory -------------------------------------------------------------------------------- /web/landingpage/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- -------------------------------------------------------------------------------- /web/landingpage/serve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | bundle exec jekyll serve -------------------------------------------------------------------------------- /web/swiftcommunity.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | } 6 | ] 7 | } --------------------------------------------------------------------------------