diff --git a/.swiftlint.yml b/.swiftlint.yml
new file mode 100644
index 0000000..7e715db
--- /dev/null
+++ b/.swiftlint.yml
@@ -0,0 +1,14 @@
+excluded: # paths to ignore during linting. Takes precedence over `included`.
+ - Pods
+
+disabled_rules:
+ - line_length
+ - identifier_name
+ - superfluous_disable_command
+ - todo
+ - cyclomatic_complexity
+ - function_body_length
+ - nesting
+ - file_length
+ - type_body_length
+ - trailing_whitespace
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..6a233e6
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,53 @@
+How to Contribute
+-----------------
+We'd love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow.
+
+Getting Started
+---------------
+We use [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) so instead of a single `master` branch, we use two branches to record the history of the project. The `master` branch stores the official release history, and the `develop` branch serves as an integration branch for features. It's also convenient to tag all commits in the master branch with a version number.
+
+Workflow
+--------
+If you would like to contribute to this project, please:
+- Pick an [issue](https://github.com/SoftwareEngineeringDaily/se-daily-iOS/issues) to work on or create a [proposal](https://github.com/SoftwareEngineeringDaily/se-daily-iOS//blob/master/CONTRIBUTING.md#feature-proposals) for a new feature.
+- Fork this project.
+- Create your feature branch based off the `develop` branch.
+- Create a pull request to get your worked reviewed and merged back into the upstream `develop` branch.
+
+Please include screenshots of your app changes and write down the test scenarios you followed to verify that your code works.
+
+Feature proposals
+-----------------
+Please create an issue, label it as a `feature proposal` and follow the following template:
+```markdown
+# Proposal: [your title here]
+
+## Summary
+{Also include any designs or wireframes here}
+
+## Rationale
+{First reason for why we should consider this proposal}
+{Second reason for why we should consider this proposal}
+{etc}
+
+## Scope
+
+## Important Notes
+
+## Open Questions
+```
+
+How to get unstuck
+------------------
+We have an active Slack community that you can reach out to for more information or just to chat with anyone. Check out the [ SED iOS app development](https://softwaredaily.slack.com/app_redirect?channel=sed_app_ios) slack channel.
+
+Also checkout the [Open Source Guide](https://softwareengineeringdaily.github.io/).
+
+Code reviews
+------------
+All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.
+
+Community Guidelines
+--------------------
+- Be considerate, kind, constructive, and helpful.
+- Do not engage in demeaning, discriminatory, harassing, or hateful speech, and imagery.
diff --git a/Constants/L10nEnum.swift b/Constants/L10nEnum.swift
index 2f8a005..d679cea 100644
--- a/Constants/L10nEnum.swift
+++ b/Constants/L10nEnum.swift
@@ -2,10 +2,13 @@
import Foundation
+// swiftlint:disable superfluous_disable_command
// swiftlint:disable file_length
// swiftlint:disable explicit_type_interface identifier_name line_length nesting type_body_length type_name
enum L10n {
+ /// Add a link
+ static let addLink = L10n.tr("Localizable", "AddLink")
/// Email Field Empty
static let alertMessageEmailEmpty = L10n.tr("Localizable", "AlertMessageEmailEmpty")
/// Invalid Email Format
@@ -32,18 +35,62 @@ enum L10n {
static let alertMessagePasswordsDonotMatch = L10n.tr("Localizable", "AlertMessagePasswordsDonotMatch")
/// Please Login
static let alertMessagePleaseLogin = L10n.tr("Localizable", "AlertMessagePleaseLogin")
+ /// Username Field Empty
+ static let alertMessageUsernameEmpty = L10n.tr("Localizable", "AlertMessageUsernameEmpty")
/// You must login to use this feature.
static let alertMessageYouMustLogin = L10n.tr("Localizable", "AlertMessageYouMustLogin")
+ /// Anonymous
+ static let anonymous = L10n.tr("Localizable", "Anonymous")
+ /// Oh, sorry you're not liking the SEDaily app
+ static let appReviewApology = L10n.tr("Localizable", "AppReviewApology")
+ /// SEDaily iOS App Feedback
+ static let appReviewEmailSubject = L10n.tr("Localizable", "AppReviewEmailSubject")
+ /// Would you help us out by sending us your feedback?
+ static let appReviewGiveFeedbackQuestion = L10n.tr("Localizable", "AppReviewGiveFeedbackQuestion")
+ /// Enjoying the SEDaily app?
+ static let appReviewPromptQuestion = L10n.tr("Localizable", "AppReviewPromptQuestion")
/// Cancel
static let cancelButtonTitle = L10n.tr("Localizable", "CancelButtonTitle")
+ /// Cancel reply
+ static let cancelReplyButtonTitle = L10n.tr("Localizable", "CancelReplyButtonTitle")
+ /// Comments
+ static let comments = L10n.tr("Localizable", "Comments")
+ /// Add a comment...
+ static let commentsPlaceholder = L10n.tr("Localizable", "CommentsPlaceholder")
/// Confirm Password
static let confirmPasswordPlaceholder = L10n.tr("Localizable", "ConfirmPasswordPlaceholder")
+ /// Are you sure you want to delete this podcast?
+ static let deletePodcast = L10n.tr("Localizable", "DeletePodcast")
+ /// YEP! Delete it please.
+ static let deletePodcastButtonTitle = L10n.tr("Localizable", "DeletePodcastButtonTitle")
+ /// Edit Profile
+ static let editProfile = L10n.tr("Localizable", "EditProfile")
/// Email
static let emailAddressPlaceholder = L10n.tr("Localizable", "EmailAddressPlaceholder")
+ /// Please send an email to jeff@softwareengineeringdaily.com
+ static let emailUnsupportedMessage = L10n.tr("Localizable", "EmailUnsupportedMessage")
+ /// Email unsupported on this device
+ static let emailUnsupportedOnDevice = L10n.tr("Localizable", "EmailUnsupportedOnDevice")
+ /// No results for search
+ static let emptySearch = L10n.tr("Localizable", "EmptySearch")
+ /// Enable Notifications
+ static let enableNotifications = L10n.tr("Localizable", "EnableNotifications")
+ /// Hello!
+ static let enthusiasticHello = L10n.tr("Localizable", "EnthusiasticHello")
+ /// Sure! Send email
+ static let enthusiasticSureSendEmail = L10n.tr("Localizable", "EnthusiasticSureSendEmail")
+ /// Yes!
+ static let enthusiasticYes = L10n.tr("Localizable", "EnthusiasticYes")
+ /// Fetching results
+ static let fetchingSearch = L10n.tr("Localizable", "FetchingSearch")
+ /// Fields cannot be blank, please fill and retry
+ static let fieldEmpty = L10n.tr("Localizable", "FieldEmpty")
/// First Name
static let firstNamePlaceholder = L10n.tr("Localizable", "FirstNamePlaceholder")
/// Error
static let genericError = L10n.tr("Localizable", "GenericError")
+ /// No
+ static let genericNo = L10n.tr("Localizable", "GenericNo")
/// OK
static let genericOK = L10n.tr("Localizable", "GenericOK")
/// Okay
@@ -54,18 +101,64 @@ enum L10n {
static let lastNamePlaceholder = L10n.tr("Localizable", "LastNamePlaceholder")
/// Login
static let loginButtonTitle = L10n.tr("Localizable", "LoginButtonTitle")
+ /// Login to see your saved episodes
+ static let loginSeeBookmarks = L10n.tr("Localizable", "LoginSeeBookmarks")
/// Login
static let loginTitle = L10n.tr("Localizable", "LoginTitle")
/// Logout
static let logoutTitle = L10n.tr("Localizable", "LogoutTitle")
+ /// We have new episodes for you!
+ static let mwfNotificationBody = L10n.tr("Localizable", "mwfNotificationBody")
+ /// Software Daily
+ static let mwfNotificationTitle = L10n.tr("Localizable", "mwfNotificationTitle")
+ /// Add new link
+ static let newLink = L10n.tr("Localizable", "NewLink")
+ /// No saved episodes.
+ static let noBookmarks = L10n.tr("Localizable", "NoBookmarks")
+ /// No downloaded episodes
+ static let noDownloads = L10n.tr("Localizable", "NoDownloads")
+ /// No thanks
+ static let noWithGratitude = L10n.tr("Localizable", "NoWithGratitude")
/// Password
static let passwordPlaceholder = L10n.tr("Localizable", "PasswordPlaceholder")
/// Play
static let play = L10n.tr("Localizable", "Play")
+ /// Post
+ static let post = L10n.tr("Localizable", "Post")
+ /// Related Links
+ static let relatedLinks = L10n.tr("Localizable", "RelatedLinks")
+ /// Reply
+ static let replyButtonTitle = L10n.tr("Localizable", "ReplyButtonTitle")
+ /// Search
+ static let search = L10n.tr("Localizable", "Search")
+ /// Add a short title
+ static let shortTitle = L10n.tr("Localizable", "ShortTitle")
+ /// Sign In
+ static let signInHeader = L10n.tr("Localizable", "SignInHeader")
/// Sign Up
static let signUpButtonTitle = L10n.tr("Localizable", "SignUpButtonTitle")
+ /// Sign Up
+ static let signUpHeader = L10n.tr("Localizable", "SignUpHeader")
+ /// Something went wrong, please try again
+ static let somethingWentWrong = L10n.tr("Localizable", "SomethingWentWrong")
+ /// Submit
+ static let submit = L10n.tr("Localizable", "Submit")
+ /// Submitting...
+ static let submitting = L10n.tr("Localizable", "Submitting")
+ /// Successfully submitted :)
+ static let succcessfullySubmitted = L10n.tr("Localizable", "SucccessfullySubmitted")
+ /// Downloads
+ static let tabBarDownloads = L10n.tr("Localizable", "TabBarDownloads")
+ /// Feed
+ static let tabBarFeed = L10n.tr("Localizable", "TabBarFeed")
+ /// Forum
+ static let tabBarForum = L10n.tr("Localizable", "TabBarForum")
/// Just For You
static let tabBarJustForYou = L10n.tr("Localizable", "TabBarJustForYou")
+ /// Notifications
+ static let tabBarNotifications = L10n.tr("Localizable", "TabBarNotifications")
+ /// Saved
+ static let tabBarSaved = L10n.tr("Localizable", "TabBarSaved")
/// Latest
static let tabBarTitleLatest = L10n.tr("Localizable", "TabBarTitleLatest")
/// All
@@ -90,6 +183,24 @@ enum L10n {
static let tabTitleOpenSource = L10n.tr("Localizable", "TabTitleOpenSource")
/// Security
static let tabTitleSecurity = L10n.tr("Localizable", "TabTitleSecurity")
+ /// Tap to refresh
+ static let tapToRefresh = L10n.tr("Localizable", "TapToRefresh")
+ /// There was a problem :(
+ static let thereWasAProblem = L10n.tr("Localizable", "ThereWasAProblem")
+ /// minutes left
+ static let timeLeft = L10n.tr("Localizable", "TimeLeft")
+ /// back to sign in
+ static let toggleToSignInButtonTitle = L10n.tr("Localizable", "ToggleToSignInButtonTitle")
+ /// no account? sign up
+ static let toggleToSignUpButtonTitle = L10n.tr("Localizable", "ToggleToSignUpButtonTitle")
+ /// Transcript
+ static let transcript = L10n.tr("Localizable", "Transcript")
+ /// Type here
+ static let typeHere = L10n.tr("Localizable", "TypeHere")
+ /// Username or Email
+ static let usernameOrEmailPlaceholder = L10n.tr("Localizable", "UsernameOrEmailPlaceholder")
+ /// Username
+ static let usernamePlaceholder = L10n.tr("Localizable", "UsernamePlaceholder")
}
// swiftlint:enable explicit_type_interface identifier_name line_length nesting type_body_length type_name
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d5f9aba
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 Kunal Kapadia
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Podfile b/Podfile
index 04c07cb..2178633 100644
--- a/Podfile
+++ b/Podfile
@@ -7,34 +7,40 @@ target 'SEDaily-IOS' do
# Pods for SEDaily-IOS
pod 'ActiveLabel', :git => 'https://github.com/optonaut/ActiveLabel.swift.git'
+p
pod 'Alamofire', '~> 4.5.1'
pod 'Crashlytics', '~> 3.9.3'
+ pod 'Down'
pod 'Disk', '~> 0.3.1'
- pod 'Eureka', '~> 4.0.1'
- pod 'Fabric', '~> 1.7.2'
- pod 'IQKeyboardManagerSwift', '~> 5.0.5'
+ pod 'Eureka', '~> 4.1.1'
+ pod 'Fabric', '~> 1.7.5'
+ pod 'Firebase/Core'
+ pod 'IQKeyboardManagerSwift', '~> 5.0.8'
+ pod 'Kingfisher', '~> 4.2.0'
pod 'KTResponsiveUI', '~> 0.2.4'
- pod 'KoalaTeaFlowLayout', '~> 0.3.1'
- pod 'KoalaTeaPlayer', '~> 0.1.7'
+ pod 'MBProgressHUD', '~> 1.1.0'
pod 'Pageboy', '~> 2.0.2'
- pod 'PureLayout', '~> 3.0.2'
+ pod 'PopupDialog', '~> 0.6.0'
pod 'Reusable', '~> 4.0.0'
- pod 'SDWebImage', '~> 4.2.1'
- pod 'SideMenu', '~> 3.1.4'
pod 'Skeleton', '~> 0.1.0'
pod 'SnapKit', '~> 4.0.0'
+ pod 'StatefulViewController', '~> 3.0'
pod 'SwiftGen', '~> 5.2.1'
- pod 'SwiftIcons', :git => 'https://github.com/themisterholliday/SwiftIcons.git', :branch => 'swift-4'
+ pod 'SwiftMoment'
+ pod 'SwiftLint', '~> 0.25.1'
pod 'SwiftSoup', '~> 1.5.8'
pod 'SwifterSwift', '~> 4.0.1'
pod 'SwiftyBeaver', '~> 1.4.2'
- pod 'SwiftyJSON', '~> 3.1.4'
+ pod 'SwiftyJSON'
pod 'Tabman', '~> 1.0.5'
- pod 'UIFontComplete', '~> 2.0.1'
-
+ pod 'WaitForIt', '~> 2.0.0'
+ pod 'Tags'
+
target 'SEDaily-IOSTests' do
inherit! :search_paths
- # Pods for testing
+ pod 'Quick'
+ pod 'Nimble'
+ pod 'Mockingjay'
end
end
diff --git a/Podfile.lock b/Podfile.lock
index 4d3e31a..91ef989 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -1,29 +1,56 @@
PODS:
- - ActiveLabel (0.7.1)
+ - ActiveLabel (0.8.1)
- Alamofire (4.5.1)
- Crashlytics (3.9.3):
- Fabric (~> 1.7.2)
- - Disk (0.3.1)
- - Eureka (4.0.1)
- - Fabric (1.7.2)
- - IQKeyboardManagerSwift (5.0.5)
- - KoalaTeaFlowLayout (0.3.1)
- - KoalaTeaPlayer (0.1.7)
- - KTResponsiveUI (0.2.4):
- - SwiftIcons
- - Pageboy (2.0.2)
- - PureLayout (3.0.2)
- - Reusable (4.0.0):
- - Reusable/Storyboard (= 4.0.0)
- - Reusable/View (= 4.0.0)
- - Reusable/Storyboard (4.0.0)
- - Reusable/View (4.0.0)
- - SDWebImage (4.2.1):
- - SDWebImage/Core (= 4.2.1)
- - SDWebImage/Core (4.2.1)
- - SideMenu (3.1.4)
- - Skeleton (0.1.0)
+ - Disk (0.3.3)
+ - Down (0.5.1)
+ - Eureka (4.1.1)
+ - Fabric (1.7.5)
+ - Firebase/Core (4.13.0):
+ - FirebaseAnalytics (= 4.2.0)
+ - FirebaseCore (= 4.0.20)
+ - FirebaseAnalytics (4.2.0):
+ - FirebaseCore (~> 4.0)
+ - FirebaseInstanceID (~> 2.0)
+ - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
+ - nanopb (~> 0.3)
+ - FirebaseCore (4.0.20):
+ - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
+ - FirebaseInstanceID (2.0.10):
+ - FirebaseCore (~> 4.0)
+ - GoogleToolboxForMac/Defines (2.1.4)
+ - "GoogleToolboxForMac/NSData+zlib (2.1.4)":
+ - GoogleToolboxForMac/Defines (= 2.1.4)
+ - IQKeyboardManagerSwift (5.0.8)
+ - Kingfisher (4.2.0)
+ - KTResponsiveUI (0.2.6)
+ - MBProgressHUD (1.1.0)
+ - Mockingjay (2.0.1):
+ - Mockingjay/Core (= 2.0.1)
+ - Mockingjay/XCTest (= 2.0.1)
+ - Mockingjay/Core (2.0.1):
+ - URITemplate (~> 2.0)
+ - Mockingjay/XCTest (2.0.1):
+ - Mockingjay/Core
+ - nanopb (0.3.8):
+ - nanopb/decode (= 0.3.8)
+ - nanopb/encode (= 0.3.8)
+ - nanopb/decode (0.3.8)
+ - nanopb/encode (0.3.8)
+ - Nimble (7.0.3)
+ - Pageboy (2.0.4)
+ - PopupDialog (0.6.2)
+ - PureLayout (3.1.4)
+ - Quick (1.2.0)
+ - Reusable (4.0.2):
+ - Reusable/Storyboard (= 4.0.2)
+ - Reusable/View (= 4.0.2)
+ - Reusable/Storyboard (4.0.2)
+ - Reusable/View (4.0.2)
+ - Skeleton (0.1.2)
- SnapKit (4.0.0)
+ - StatefulViewController (3.0)
- SwifterSwift (4.0.1):
- SwifterSwift/AppKit (= 4.0.1)
- SwifterSwift/CoreGraphics (= 4.0.1)
@@ -38,84 +65,140 @@ PODS:
- SwifterSwift/SwiftStdlib (4.0.1)
- SwifterSwift/UIKit (4.0.1)
- SwiftGen (5.2.1)
- - SwiftIcons (1.5.1)
+ - SwiftLint (0.25.1)
+ - SwiftMoment (0.7)
- SwiftSoup (1.5.8)
- - SwiftyBeaver (1.4.2)
- - SwiftyJSON (3.1.4)
- - Tabman (1.0.5):
- - Pageboy (~> 2.0.0)
- - PureLayout (~> 3.0.0)
- - UIFontComplete (2.0.1)
+ - SwiftyBeaver (1.4.4)
+ - SwiftyJSON (5.0.0)
+ - Tabman (1.0.8):
+ - Pageboy (~> 2.0)
+ - PureLayout (~> 3.0)
+ - Tags (0.2.4)
+ - URITemplate (2.0.3)
+ - WaitForIt (2.0.0)
DEPENDENCIES:
- ActiveLabel (from `https://github.com/optonaut/ActiveLabel.swift.git`)
- Alamofire (~> 4.5.1)
- Crashlytics (~> 3.9.3)
- Disk (~> 0.3.1)
- - Eureka (~> 4.0.1)
- - Fabric (~> 1.7.2)
- - IQKeyboardManagerSwift (~> 5.0.5)
- - KoalaTeaFlowLayout (~> 0.3.1)
- - KoalaTeaPlayer (~> 0.1.7)
+ - Down
+ - Eureka (~> 4.1.1)
+ - Fabric (~> 1.7.5)
+ - Firebase/Core
+ - IQKeyboardManagerSwift (~> 5.0.8)
+ - Kingfisher (~> 4.2.0)
- KTResponsiveUI (~> 0.2.4)
+ - MBProgressHUD (~> 1.1.0)
+ - Mockingjay
+ - Nimble
- Pageboy (~> 2.0.2)
- - PureLayout (~> 3.0.2)
+ - PopupDialog (~> 0.6.0)
+ - Quick
- Reusable (~> 4.0.0)
- - SDWebImage (~> 4.2.1)
- - SideMenu (~> 3.1.4)
- Skeleton (~> 0.1.0)
- SnapKit (~> 4.0.0)
+ - StatefulViewController (~> 3.0)
- SwifterSwift (~> 4.0.1)
- SwiftGen (~> 5.2.1)
- - SwiftIcons (from `https://github.com/themisterholliday/SwiftIcons.git`, branch `swift-4`)
+ - SwiftLint (~> 0.25.1)
+ - SwiftMoment
- SwiftSoup (~> 1.5.8)
- SwiftyBeaver (~> 1.4.2)
- - SwiftyJSON (~> 3.1.4)
+ - SwiftyJSON
- Tabman (~> 1.0.5)
- - UIFontComplete (~> 2.0.1)
+ - Tags
+ - WaitForIt (~> 2.0.0)
+
+SPEC REPOS:
+ https://github.com/cocoapods/specs.git:
+ - Alamofire
+ - Crashlytics
+ - Disk
+ - Down
+ - Eureka
+ - Fabric
+ - Firebase
+ - FirebaseAnalytics
+ - FirebaseCore
+ - FirebaseInstanceID
+ - GoogleToolboxForMac
+ - IQKeyboardManagerSwift
+ - Kingfisher
+ - KTResponsiveUI
+ - MBProgressHUD
+ - Mockingjay
+ - nanopb
+ - Nimble
+ - Pageboy
+ - PopupDialog
+ - PureLayout
+ - Quick
+ - Reusable
+ - Skeleton
+ - SnapKit
+ - StatefulViewController
+ - SwifterSwift
+ - SwiftGen
+ - SwiftLint
+ - SwiftMoment
+ - SwiftSoup
+ - SwiftyBeaver
+ - SwiftyJSON
+ - Tabman
+ - Tags
+ - URITemplate
+ - WaitForIt
EXTERNAL SOURCES:
ActiveLabel:
:git: https://github.com/optonaut/ActiveLabel.swift.git
- SwiftIcons:
- :branch: swift-4
- :git: https://github.com/themisterholliday/SwiftIcons.git
CHECKOUT OPTIONS:
ActiveLabel:
- :commit: 3f869d1245e3663379d92a2b918f0af7aec9cf89
+ :commit: 3e98a76353bcdeea879e7d2552f58d6967207dab
:git: https://github.com/optonaut/ActiveLabel.swift.git
- SwiftIcons:
- :commit: 56e9cf1019b01a4a9a2f22a78e84618f4ea094aa
- :git: https://github.com/themisterholliday/SwiftIcons.git
SPEC CHECKSUMS:
- ActiveLabel: faa96b5f50507770536a3e48a4cf291ee88fb7db
+ ActiveLabel: 2fc3cdffed0dcdaad82d50af46233b9ef2f401e4
Alamofire: 2d95912bf4c34f164fdfc335872e8c312acaea4a
Crashlytics: dbb07d01876c171c5ccbdf7826410380189e452c
- Disk: 64f0f95a4163314aba6f09f010f17de964762140
- Eureka: c8bd5cc07143b6f66268c208d28a246c99b41955
- Fabric: 9cd6a848efcf1b8b07497e0b6a2e7d336353ba15
- IQKeyboardManagerSwift: ee393093cfb41069a72584a8f599ba5519a7febe
- KoalaTeaFlowLayout: 219c45709d0873d405b2de1b27080a9c411246b7
- KoalaTeaPlayer: 52b9f24cf3730099164e06767e5d480b0532064e
- KTResponsiveUI: 34a7f474fe9fcb8d99597b162b4ad5ca5d56342b
- Pageboy: d5b9fe9a59202674c44111e513e67ccc680e18b7
- PureLayout: 4d550abe49a94f24c2808b9b95db9131685fe4cd
- Reusable: 98e5fff1e0e2e00872199699b276dde08ee56c07
- SDWebImage: 1fa4c9edf525b744f002db89f3f5a38b3cd4c541
- SideMenu: 99021e70b3f2eee65b5dd88e4274d09031b1221e
- Skeleton: b76249b7d6a73a9913e164c8030647a3e005c700
+ Disk: d1f55cd61f6ca20f368232d0c6e37e3c3dfcb63e
+ Down: 6ace44ecec0c408826342ed420002f39a18e38c3
+ Eureka: b88fb930e42c79f8c03c373d0fcdc28c1d6c50ed
+ Fabric: ae7146a5f505ea370a1e44820b4b1dc8890e2890
+ Firebase: 5ec5e863d269d82d66b4bf56856726f8fb8f0fb3
+ FirebaseAnalytics: 7ef69e76a5142f643aeb47c780e1cdce4e23632e
+ FirebaseCore: 90cb1c53d69b556f112a1bf72b5fcfaad7650790
+ FirebaseInstanceID: 8d20d890d65c917f9f7d9950b6e10a760ad34321
+ GoogleToolboxForMac: 91c824d21e85b31c2aae9bb011c5027c9b4e738f
+ IQKeyboardManagerSwift: 2e7dc7f98c111458c1ea2b373f893e8cf95e2b97
+ Kingfisher: 9ee7e788d8ba07c3f21ce0d43f33cec310a4f781
+ KTResponsiveUI: c8a75fe5270e05749a5ca8d20ab008a285b5e260
+ MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9
+ Mockingjay: 11a621880d2887f1775bdcf824341eb68f218450
+ nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3
+ Nimble: 7f5a9c447a33002645a071bddafbfb24ea70e0ac
+ Pageboy: 5970f6138b035380fd633b1813b7cc056784b784
+ PopupDialog: d4336d7274a6aa3af4cb26d8b6691510eba90cc3
+ PureLayout: f08c01b8dec00bb14a1fefa3de4c7d9c265df85e
+ Quick: 58d203b1c5e27fff7229c4c1ae445ad7069a7a08
+ Reusable: 584a5629747c52e0f6a77841b400dc2643f6fa0f
+ Skeleton: 0d2941ce8d24f60a7e85ee39e55203256300b538
SnapKit: a42d492c16e80209130a3379f73596c3454b7694
+ StatefulViewController: 4803bf900d44de26074344998e10e041113b5931
SwifterSwift: 5f406a5f831343312d6d5b34282b57ef3f52c40b
SwiftGen: 444b4c467e512a4812b8a800d731643fd265139e
- SwiftIcons: b20641adce6b71fcb2e72389b4b5f2e87252df99
+ SwiftLint: ce933681be10c3266e82576dad676fa815a602e9
+ SwiftMoment: dc6dd27012e267819104cbb03f74ff9192dd0b42
SwiftSoup: 86a1f5ad07b7e3d14ab1a9324a58c75ae2215e79
- SwiftyBeaver: 91057725648ee4980308f1650af077d04b3654a0
- SwiftyJSON: c2842d878f95482ffceec5709abc3d05680c0220
- Tabman: 9f87244fdbbd070fe6a518f445880b2b4a56ea1b
- UIFontComplete: 7e3ce7f0a12d2529fb07f537e262aabfa87df280
+ SwiftyBeaver: 25bd76281f49ca989ec2e3cbde9af89c15bc1432
+ SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
+ Tabman: 9f9a25595516c7dffb747be271ec8a0a5ac2341e
+ Tags: f513b25d753de97503f1bef5b4ff1fca4a0d5b29
+ URITemplate: ace0c4c46dcf8afe6e89b4060621852886b15c3b
+ WaitForIt: 2c7ad6deaffe3bf727b7242a2263167bf2ce3e57
-PODFILE CHECKSUM: eda67d2e802f0442870d2d12c35e79ee9fe94cc0
+PODFILE CHECKSUM: 7cee19db3c2ecba4fc4f5ee08270355d84249fc2
-COCOAPODS: 1.3.1
+COCOAPODS: 1.7.3
diff --git a/README.md b/README.md
index 65c5f77..36c6f8c 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,20 @@
# Software Engineering Daily iOS App
+[![logo](https://i.imgur.com/3OtP3p8.png)](https://softwareengineeringdaily.com/)
+
Native iOS app for [Software Engineering Daily](https://softwareengineeringdaily.com/).
+## Screenshots
+
+![App screenshots](screenshots/app_screenshots.png)
+
+## Getting Started
+
+The app is 100% Swift. User interface is built mostly in code using [SnapKit](https://github.com/SnapKit/SnapKit) DSL. The current architecture is MVVM-C, but moving forward we are open to consider some Redux-like state management implementation.
+
## Setup
We are using [CocoaPods](http://cocoapods.org) to manage dependencies.
-
Clone the repo and then run:
```
@@ -18,3 +27,24 @@ CocoaPods requires that you open the *SEDaily-IOS.xcworkspace*.
```
$ open SEDaily-IOS.xcworkspace
```
+
+## Dependencies
+
+There are +25 various dependencies used in the project. Moving forward some of them may be subject to change/removal.
+The most important ones are:
+
+* [SnapKit](https://github.com/SnapKit/SnapKit) - Build layouts in code.
+* [Alamofire](https://github.com/Alamofire/Alamofire) - Industry standard for networking.
+* [Kingfisher](https://github.com/onevcat/Kingfisher) - Caching images.
+* [SwiftLint](https://github.com/realm/SwiftLint) - Swift language linter.
+
+
+
+## Upcoming features
+
+Interested in seeing a particular feature implemented in this app? Please open a new [issue](https://github.com/SoftwareEngineeringDaily/se-daily-iOS/issues) with a [feature proposal](https://github.com/SoftwareEngineeringDaily/se-daily-iOS/blob/master/CONTRIBUTING.md#feature-proposals).
+
+Contributing
+------------
+Checkout [CONTRIBUTING.md](https://github.com/SoftwareEngineeringDaily/se-daily-iOS/CONTRIBUTING.md) for details.
+
diff --git a/SEDaily-IOS.xcodeproj/project.pbxproj b/SEDaily-IOS.xcodeproj/project.pbxproj
index 0920655..8db1aa3 100644
--- a/SEDaily-IOS.xcodeproj/project.pbxproj
+++ b/SEDaily-IOS.xcodeproj/project.pbxproj
@@ -3,18 +3,16 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
01BB1D6D1F29999E004A912E /* PodcastPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01BB1D6C1F29999E004A912E /* PodcastPageViewController.swift */; };
- 161F3DE61F61F73D00A8F825 /* SearchTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161F3DE51F61F73D00A8F825 /* SearchTableViewController.swift */; };
- 161F3DEA1F62703100A8F825 /* PodcastTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161F3DE91F62703100A8F825 /* PodcastTableViewCell.swift */; };
+ 161791FC1FC4DA7200A1287E /* OfflineDownloadsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161791FB1FC4DA7200A1287E /* OfflineDownloadsManager.swift */; };
+ 161F3DE61F61F73D00A8F825 /* SearchCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161F3DE51F61F73D00A8F825 /* SearchCollectionViewController.swift */; };
+ 162FFD401FBE200E0026288D /* DiskKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162FFD3F1FBE200E0026288D /* DiskKeys.swift */; };
16307FCA1F8FDD02001783CB /* Podcast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16307FC91F8FDD02001783CB /* Podcast.swift */; };
16307FCC1F8FEE3A001783CB /* PodcastViewModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16307FCB1F8FEE3A001783CB /* PodcastViewModelController.swift */; };
- 1649A78A1F204EC6005C4A6E /* ContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1649A7891F204EC6005C4A6E /* ContainerViewController.swift */; };
- 164C71051F021AC8003803BC /* CustomTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164C71041F021AC8003803BC /* CustomTabViewController.swift */; };
- 164FE9DC1F02DAB5009419CA /* PodcastCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9DB1F02DAB5009419CA /* PodcastCollectionViewCell.swift */; };
164FE9E11F02EE67009419CA /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E01F02EE67009419CA /* LoginViewController.swift */; };
164FE9E51F02EE83009419CA /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E41F02EE83009419CA /* API.swift */; };
164FE9E71F02F02F009419CA /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E61F02F02F009419CA /* UserModel.swift */; };
@@ -24,26 +22,120 @@
164FE9EF1F03065C009419CA /* NavigationControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9EE1F03065C009419CA /* NavigationControllerExtension.swift */; };
165484551F902D3F005AEA23 /* GeneralCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165484541F902D3F005AEA23 /* GeneralCollectionViewController.swift */; };
166036211F266FF300A22B7B /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 166036201F266FF300A22B7B /* Notifications.swift */; };
- 167AFAB71F043F1100A1332F /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 167AFAB61F043F1100A1332F /* HeaderView.swift */; };
+ 1671BD56200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD55200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift */; };
+ 1671BD58200D361900E6ED3B /* SubscriptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD57200D361900E6ED3B /* SubscriptionModel.swift */; };
+ 1671BD5A200D3D7800E6ED3B /* SubscriptionStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD59200D3D7800E6ED3B /* SubscriptionStatusViewController.swift */; };
1686FC011F009EC00088A6C1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1686FC001F009EC00088A6C1 /* AppDelegate.swift */; };
1686FC061F009EC00088A6C1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC041F009EC00088A6C1 /* Main.storyboard */; };
1686FC081F009EC00088A6C1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC071F009EC00088A6C1 /* Assets.xcassets */; };
1686FC0B1F009EC00088A6C1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC091F009EC00088A6C1 /* LaunchScreen.storyboard */; };
- 1686FC161F009EC00088A6C1 /* SEDaily_IOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1686FC151F009EC00088A6C1 /* SEDaily_IOSTests.swift */; };
+ 1686FC161F009EC00088A6C1 /* SEDailyIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1686FC151F009EC00088A6C1 /* SEDailyIOSTests.swift */; };
+ 1688CB4C2006BDDA00440095 /* APIStripeExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1688CB4B2006BDDA00440095 /* APIStripeExtension.swift */; };
169806A61F8EF3970075D8AD /* L10nEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169806A51F8EF08F0075D8AD /* L10nEnum.swift */; };
16AD3E0A1F9B138D0084C545 /* PodcastViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E091F9B138D0084C545 /* PodcastViewModel.swift */; };
16AD3E0C1F9B13EE0084C545 /* FilterObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E0B1F9B13EE0084C545 /* FilterObject.swift */; };
16AD3E0E1F9B14130084C545 /* PodcastDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E0D1F9B14130084C545 /* PodcastDataSource.swift */; };
- 16B147B11F16BF9C00433A42 /* AudioViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16B147B01F16BF9C00433A42 /* AudioViewManager.swift */; };
- 16CE698F1F98029E0057BAC3 /* PodcastDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CE698E1F98029E0057BAC3 /* PodcastDetailViewController.swift */; };
- 16CE69911F9807CF0057BAC3 /* PodcastDescriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CE69901F9807CF0057BAC3 /* PodcastDescriptionView.swift */; };
16D67C4A1F33AC620065E838 /* AnswersTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16D67C491F33AC620065E838 /* AnswersTracker.swift */; };
- 16D766BA1F06B4850066C143 /* AudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16D766B91F06B4850066C143 /* AudioView.swift */; };
16F3A1BA1F90918D00364709 /* PodcastRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F3A1B91F90918D00364709 /* PodcastRepository.swift */; };
16FA84031F8D323700A45D9B /* SkeletonCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16FA84021F8D323700A45D9B /* SkeletonCollectionView.swift */; };
+ 1E286DE31FE4C5BA00644C1D /* TestHookEventTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE21FE4C5BA00644C1D /* TestHookEventTableViewCell.swift */; };
+ 1E286DE51FE4C63200644C1D /* TestHookManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE41FE4C63200644C1D /* TestHookManager.swift */; };
+ 1E286DE91FE4C65200644C1D /* TestHookEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE81FE4C65200644C1D /* TestHookEvent.swift */; };
+ 1E2BFDCD2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2BFDCC2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift */; };
1E44AF031F87B08D00221B22 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E44AF051F87B08D00221B22 /* Localizable.strings */; };
+ 1E638E561FC794AC00A29BDC /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E638E551FC794AC00A29BDC /* ProgressIndicator.swift */; };
+ 1E706BD21FD620B100D44AB2 /* BookmarkCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E706BD11FD620B100D44AB2 /* BookmarkCollectionViewController.swift */; };
+ 1E706BD41FD62E0300D44AB2 /* BookmarkViewModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E706BD31FD62E0300D44AB2 /* BookmarkViewModelController.swift */; };
+ 1EABD8F41FB430AB00959859 /* Debug.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1EABD8F11FB430AA00959859 /* Debug.storyboard */; };
+ 1EABD8F51FB430AB00959859 /* DebugTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EABD8F21FB430AA00959859 /* DebugTabViewController.swift */; };
+ 1EABD8F61FB430AB00959859 /* TestHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EABD8F31FB430AA00959859 /* TestHook.swift */; };
+ 1EB74FFC1FE5E1AF004B733E /* StateBookmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EB74FFB1FE5E1AF004B733E /* StateBookmarkView.swift */; };
238E99F4E37C7365658113B8 /* Pods_SEDaily_IOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF0C9F051C6C2F8638D2ABF8 /* Pods_SEDaily_IOSTests.framework */; };
24412438C753126FDDD37CBF /* Pods_SEDaily_IOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3651E5B02B83E392546E167 /* Pods_SEDaily_IOS.framework */; };
+ 43086E3122A67F4B00B8B65B /* ProfileTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43086E3022A67F4B00B8B65B /* ProfileTableViewDataSource.swift */; };
+ 43086E3322A7AD2400B8B65B /* SummaryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43086E3222A7AD2400B8B65B /* SummaryCell.swift */; };
+ 43086E3522A7C7CB00B8B65B /* User+ProfileViewController.Section.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43086E3422A7C7CB00B8B65B /* User+ProfileViewController.Section.swift */; };
+ 43086E3722A85C7A00B8B65B /* AvatarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43086E3622A85C7A00B8B65B /* AvatarCell.swift */; };
+ 43086E3B22A8EAF800B8B65B /* SwitchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43086E3A22A8EAF800B8B65B /* SwitchCell.swift */; };
+ 430FF9C922B2FEF70033A15A /* URLSchemaHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430FF9C822B2FEF60033A15A /* URLSchemaHelper.swift */; };
+ 431135D422AA2E2B00BFC910 /* SeparatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431135D322AA2E2B00BFC910 /* SeparatorCell.swift */; };
+ 431DE891228D619D00FACA74 /* PostsForTopicCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DE890228D619C00FACA74 /* PostsForTopicCollectionViewController.swift */; };
+ 433A866522DDD3510055F931 /* RemoteCommandDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 433A866422DDD3510055F931 /* RemoteCommandDataSource.swift */; };
+ 433A866722DDD3720055F931 /* RemoteCommandManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 433A866622DDD3720055F931 /* RemoteCommandManager.swift */; };
+ 43476C9722DDA8A90032ABD5 /* PlaybackSpeed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476C9622DDA8A90032ABD5 /* PlaybackSpeed.swift */; };
+ 43476C9D22DDBD770032ABD5 /* ForumThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476C9C22DDBD770032ABD5 /* ForumThread.swift */; };
+ 43476C9F22DDBDB90032ABD5 /* ForumThreadLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476C9E22DDBDB90032ABD5 /* ForumThreadLite.swift */; };
+ 43476CA222DDD1AB0032ABD5 /* AssetPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476CA122DDD1AB0032ABD5 /* AssetPlayer.swift */; };
+ 43476CA422DDD1D20032ABD5 /* Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476CA322DDD1D20032ABD5 /* Asset.swift */; };
+ 43476CA622DDD2190032ABD5 /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43476CA522DDD2190032ABD5 /* PlayerView.swift */; };
+ 4359B94422C73B4C009704F8 /* KoalaTeaFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4359B94322C73B4C009704F8 /* KoalaTeaFlowLayout.swift */; };
+ 4359B94622C7494D009704F8 /* AudioPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4359B94522C7494D009704F8 /* AudioPlayerView.swift */; };
+ 435BAF3A22783B7C00762891 /* EpisodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435BAF3922783B7C00762891 /* EpisodeViewController.swift */; };
+ 435BAF3C2278430900762891 /* EpisodeHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435BAF3B2278430900762891 /* EpisodeHeaderCell.swift */; };
+ 436317D922C38B5F0091DA8C /* MainFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436317D822C38B5F0091DA8C /* MainFlowCoordinator.swift */; };
+ 436317DC22C38C590091DA8C /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436317DB22C38C590091DA8C /* RootViewController.swift */; };
+ 436317DE22C38DB50091DA8C /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436317DD22C38DB50091DA8C /* MainTabBarController.swift */; };
+ 436317E022C3993F0091DA8C /* OverlayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436317DF22C3993F0091DA8C /* OverlayViewController.swift */; };
+ 436317E422C39A8B0091DA8C /* StateController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436317E322C39A8A0091DA8C /* StateController.swift */; };
+ 4381367D229FFCC4008043B2 /* UIColor+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4381367C229FFCC4008043B2 /* UIColor+Extensions.swift */; };
+ 4398EA3022AE58BF002F22F0 /* LabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4398EA2F22AE58BF002F22F0 /* LabelCell.swift */; };
+ 439BCC6C22802EDC008D808B /* CurrentlyPlaying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439BCC6B22802EDC008D808B /* CurrentlyPlaying.swift */; };
+ 439BCC6E2280CD6B008D808B /* CommentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439BCC6D2280CD6B008D808B /* CommentCell.swift */; };
+ 439BCC7522818F9D008D808B /* ProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439BCC7422818F9D008D808B /* ProfileViewController.swift */; };
+ 43A680D02270718600A639A9 /* Debouncer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A680CF2270718600A639A9 /* Debouncer.swift */; };
+ 43A680D222707DC000A639A9 /* DownloadService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A680D122707DC000A639A9 /* DownloadService.swift */; };
+ 43A680D42270803700A639A9 /* BookmarkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A680D32270803700A639A9 /* BookmarkService.swift */; };
+ 43AA2C912268530C0050668B /* ItemCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43AA2C902268530C0050668B /* ItemCollectionViewCell.swift */; };
+ 43AA2C962268AC7B0050668B /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C932268AC7B0050668B /* Roboto-Light.ttf */; };
+ 43AA2C972268AC7B0050668B /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C942268AC7B0050668B /* Roboto-Bold.ttf */; };
+ 43AA2C982268AC7B0050668B /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C952268AC7B0050668B /* Roboto-Regular.ttf */; };
+ 43AA2C9B2268AEE50050668B /* OpenSans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C992268AEE50050668B /* OpenSans-Light.ttf */; };
+ 43AA2C9E2268B1FD0050668B /* OpenSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C9D2268B1FD0050668B /* OpenSans-Regular.ttf */; };
+ 43AA2CA02268B2660050668B /* OpenSans-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 43AA2C9F2268B2660050668B /* OpenSans-Semibold.ttf */; };
+ 43AD7117228AF08B00E930BD /* TagsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43AD7116228AF08B00E930BD /* TagsCell.swift */; };
+ 43AD7119228B05A400E930BD /* Topic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43AD7118228B05A400E930BD /* Topic.swift */; };
+ 43BA7BF8228452A4000E1171 /* NotificationsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BA7BF7228452A4000E1171 /* NotificationsController.swift */; };
+ 43C0C76222798635007A92E7 /* ActionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C0C76122798635007A92E7 /* ActionView.swift */; };
+ 43C0C764227AE7D1007A92E7 /* WebViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C0C763227AE7D1007A92E7 /* WebViewCell.swift */; };
+ 43CE140C225F7EF700B57CFA /* PlayProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE140B225F7EF700B57CFA /* PlayProgress.swift */; };
+ 43CE140E226070FB00B57CFA /* PlayProgressModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE140D226070FB00B57CFA /* PlayProgressModelController.swift */; };
+ 43CE451E2293E85D0048426A /* Haptics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE451D2293E85C0048426A /* Haptics.swift */; };
+ 43CE45212293ECFC0048426A /* DownloadsCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE45202293ECFC0048426A /* DownloadsCollectionViewController.swift */; };
+ 43CE45232293F14B0048426A /* DownloadsViewModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE45222293F14B0048426A /* DownloadsViewModelController.swift */; };
+ 43CE8E0D2271AFC000DD990F /* HtmlHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE8E0C2271AFC000DD990F /* HtmlHelper.swift */; };
+ 43F4591F226F27BB00641705 /* UpvoteService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F4591E226F27BA00641705 /* UpvoteService.swift */; };
+ 96004ACE20A9E0030017230F /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 96004ACD20A9E0030017230F /* GoogleService-Info.plist */; };
+ 960BFEBB202109800073DAB2 /* AskForReview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEBA202109800073DAB2 /* AskForReview.swift */; };
+ 960BFEBF20226B620073DAB2 /* CommentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEBE20226B620073DAB2 /* CommentsViewController.swift */; };
+ 960BFEC320239F0E0073DAB2 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC220239F0E0073DAB2 /* Comment.swift */; };
+ 960BFEC52023C1330073DAB2 /* CommentsResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC42023C1330073DAB2 /* CommentsResponse.swift */; };
+ 9610313E20A353B400A2D2D5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9610313D20A353B400A2D2D5 /* AnalyticsHelper.swift */; };
+ 962F5365201E3C7900897A6E /* RelatedLinksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962F5364201E3C7900897A6E /* RelatedLinksViewController.swift */; };
+ 964090BF2093B97D00CFF5C4 /* PodcastLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964090BE2093B97D00CFF5C4 /* PodcastLite.swift */; };
+ 965E165820ABD74900F2E4E4 /* FeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965E165720ABD74900F2E4E4 /* FeedItem.swift */; };
+ 96600312201CEBBD00997795 /* RelatedLinks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96600311201CEBBD00997795 /* RelatedLinks.storyboard */; };
+ 9662FC0A20AF21FA00CFA8DF /* BaseFeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9662FC0920AF21FA00CFA8DF /* BaseFeedItem.swift */; };
+ 9672AA52202929C90020981F /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9672AA51202929C90020981F /* Author.swift */; };
+ 96BD1C88208E9497006C5E1D /* TestHookBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BD1C87208E9497006C5E1D /* TestHookBool.swift */; };
+ 96F35745201BFB0200E8B6E9 /* RelatedLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F35744201BFB0200E8B6E9 /* RelatedLink.swift */; };
+ C0109D992013ECE0008BDA69 /* upvote_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C0109D982013ECE0008BDA69 /* upvote_success.json */; };
+ C0109D9B2013F064008BDA69 /* upvote_failure.json in Resources */ = {isa = PBXBuildFile; fileRef = C0109D9A2013F064008BDA69 /* upvote_failure.json */; };
+ C0109D9E2013F629008BDA69 /* LoginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109D9D2013F629008BDA69 /* LoginTests.swift */; };
+ C0109DA02013F6A5008BDA69 /* RegisterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109D9F2013F6A5008BDA69 /* RegisterTests.swift */; };
+ C0109DA22013F6D8008BDA69 /* PostsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109DA12013F6D8008BDA69 /* PostsTests.swift */; };
+ C015CB17201132DE00C6FD82 /* register_userexists.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB16201132DE00C6FD82 /* register_userexists.json */; };
+ C015CB192011373000C6FD82 /* register_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB182011373000C6FD82 /* register_success.json */; };
+ C015CB1B2011388C00C6FD82 /* register_emptyusernamepass.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB1A2011388C00C6FD82 /* register_emptyusernamepass.json */; };
+ C015CB1E20113CAB00C6FD82 /* getPostsWith_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB1D20113CAB00C6FD82 /* getPostsWith_success.json */; };
+ C04C37FD200E94AE00C6EFC6 /* login_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C37FC200E94AE00C6EFC6 /* login_success.json */; };
+ C04C3800200EA6F400C6EFC6 /* login_wrongpass.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C37FF200EA6F400C6EFC6 /* login_wrongpass.json */; };
+ C04C3802200EA99200C6EFC6 /* login_nonexistinguser.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C3801200EA99200C6EFC6 /* login_nonexistinguser.json */; };
+ C0590D78200AC2A500A00E4D /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0590D77200AC2A500A00E4D /* NetworkService.swift */; };
+ C0590D7A200AD36500A00E4D /* VotingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0590D79200AD36400A00E4D /* VotingTests.swift */; };
+ C05DA1D92013FA34003C631F /* getPosts_topPosts.json in Resources */ = {isa = PBXBuildFile; fileRef = C05DA1D82013FA34003C631F /* getPosts_topPosts.json */; };
+ C079B6541FCA07F800B4B304 /* HelpersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C079B6531FCA07F800B4B304 /* HelpersTests.swift */; };
+ C0E64BB41FCB3F9100753AF0 /* UserModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E64BB31FCB3F9100753AF0 /* UserModelTests.swift */; };
+ C0E64BB71FCB406000753AF0 /* UserDefaultsMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E64BB61FCB406000753AF0 /* UserDefaultsMock.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -58,13 +150,11 @@
/* Begin PBXFileReference section */
01BB1D6C1F29999E004A912E /* PodcastPageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastPageViewController.swift; sourceTree = ""; };
- 161F3DE51F61F73D00A8F825 /* SearchTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchTableViewController.swift; sourceTree = ""; };
- 161F3DE91F62703100A8F825 /* PodcastTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastTableViewCell.swift; sourceTree = ""; };
+ 161791FB1FC4DA7200A1287E /* OfflineDownloadsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OfflineDownloadsManager.swift; sourceTree = ""; };
+ 161F3DE51F61F73D00A8F825 /* SearchCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchCollectionViewController.swift; sourceTree = ""; };
+ 162FFD3F1FBE200E0026288D /* DiskKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskKeys.swift; sourceTree = ""; };
16307FC91F8FDD02001783CB /* Podcast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Podcast.swift; sourceTree = ""; };
16307FCB1F8FEE3A001783CB /* PodcastViewModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastViewModelController.swift; sourceTree = ""; };
- 1649A7891F204EC6005C4A6E /* ContainerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerViewController.swift; sourceTree = ""; };
- 164C71041F021AC8003803BC /* CustomTabViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomTabViewController.swift; sourceTree = ""; };
- 164FE9DB1F02DAB5009419CA /* PodcastCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastCollectionViewCell.swift; sourceTree = ""; };
164FE9E01F02EE67009419CA /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; };
164FE9E41F02EE83009419CA /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = ""; };
164FE9E61F02F02F009419CA /* UserModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserModel.swift; sourceTree = ""; };
@@ -74,7 +164,9 @@
164FE9EE1F03065C009419CA /* NavigationControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationControllerExtension.swift; sourceTree = ""; };
165484541F902D3F005AEA23 /* GeneralCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralCollectionViewController.swift; sourceTree = ""; };
166036201F266FF300A22B7B /* Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = ""; };
- 167AFAB61F043F1100A1332F /* HeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; };
+ 1671BD55200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseSubscriptionViewController.swift; sourceTree = ""; };
+ 1671BD57200D361900E6ED3B /* SubscriptionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionModel.swift; sourceTree = ""; };
+ 1671BD59200D3D7800E6ED3B /* SubscriptionStatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionStatusViewController.swift; sourceTree = ""; };
1686FBFD1F009EC00088A6C1 /* SEDaily-IOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SEDaily-IOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
1686FC001F009EC00088A6C1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
1686FC051F009EC00088A6C1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
@@ -82,28 +174,120 @@
1686FC0A1F009EC00088A6C1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
1686FC0C1F009EC00088A6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
1686FC111F009EC00088A6C1 /* SEDaily-IOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SEDaily-IOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- 1686FC151F009EC00088A6C1 /* SEDaily_IOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SEDaily_IOSTests.swift; sourceTree = ""; };
+ 1686FC151F009EC00088A6C1 /* SEDailyIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SEDailyIOSTests.swift; sourceTree = ""; };
1686FC171F009EC00088A6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 1688CB4B2006BDDA00440095 /* APIStripeExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIStripeExtension.swift; sourceTree = ""; };
169806A51F8EF08F0075D8AD /* L10nEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L10nEnum.swift; sourceTree = ""; };
16AD3E091F9B138D0084C545 /* PodcastViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastViewModel.swift; sourceTree = ""; };
16AD3E0B1F9B13EE0084C545 /* FilterObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterObject.swift; sourceTree = ""; };
16AD3E0D1F9B14130084C545 /* PodcastDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastDataSource.swift; sourceTree = ""; };
- 16B147B01F16BF9C00433A42 /* AudioViewManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioViewManager.swift; sourceTree = ""; };
- 16CE698E1F98029E0057BAC3 /* PodcastDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastDetailViewController.swift; sourceTree = ""; };
- 16CE69901F9807CF0057BAC3 /* PodcastDescriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastDescriptionView.swift; sourceTree = ""; };
16D67C491F33AC620065E838 /* AnswersTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnswersTracker.swift; sourceTree = ""; };
- 16D766B91F06B4850066C143 /* AudioView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioView.swift; sourceTree = ""; };
16F3A1B91F90918D00364709 /* PodcastRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastRepository.swift; sourceTree = ""; };
16FA84021F8D323700A45D9B /* SkeletonCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonCollectionView.swift; sourceTree = ""; };
+ 1E286DE21FE4C5BA00644C1D /* TestHookEventTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookEventTableViewCell.swift; sourceTree = ""; };
+ 1E286DE41FE4C63200644C1D /* TestHookManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookManager.swift; sourceTree = ""; };
+ 1E286DE81FE4C65200644C1D /* TestHookEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookEvent.swift; sourceTree = ""; };
+ 1E2BFDCC2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHookBoolTableViewCell.swift; sourceTree = ""; };
1E44AEFF1F87ACF500221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/LaunchScreen.strings; sourceTree = ""; };
1E44AF001F87ACF500221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; };
1E44AF061F87B09100221B22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; };
1E44AF081F87B0A700221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; };
+ 1E638E551FC794AC00A29BDC /* ProgressIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressIndicator.swift; sourceTree = ""; };
+ 1E706BD11FD620B100D44AB2 /* BookmarkCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BookmarkCollectionViewController.swift; path = Bookmark/BookmarkCollectionViewController.swift; sourceTree = ""; };
+ 1E706BD31FD62E0300D44AB2 /* BookmarkViewModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BookmarkViewModelController.swift; path = Bookmark/BookmarkViewModelController.swift; sourceTree = ""; };
+ 1EABD8F11FB430AA00959859 /* Debug.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Debug.storyboard; sourceTree = ""; };
+ 1EABD8F21FB430AA00959859 /* DebugTabViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugTabViewController.swift; sourceTree = ""; };
+ 1EABD8F31FB430AA00959859 /* TestHook.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHook.swift; sourceTree = ""; };
+ 1EB74FFB1FE5E1AF004B733E /* StateBookmarkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = StateBookmarkView.swift; path = Bookmark/StateBookmarkView.swift; sourceTree = ""; };
+ 43086E3022A67F4B00B8B65B /* ProfileTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTableViewDataSource.swift; sourceTree = ""; };
+ 43086E3222A7AD2400B8B65B /* SummaryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryCell.swift; sourceTree = ""; };
+ 43086E3422A7C7CB00B8B65B /* User+ProfileViewController.Section.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "User+ProfileViewController.Section.swift"; sourceTree = ""; };
+ 43086E3622A85C7A00B8B65B /* AvatarCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarCell.swift; sourceTree = ""; };
+ 43086E3A22A8EAF800B8B65B /* SwitchCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchCell.swift; sourceTree = ""; };
+ 430FF9C822B2FEF60033A15A /* URLSchemaHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSchemaHelper.swift; sourceTree = ""; };
+ 431135D322AA2E2B00BFC910 /* SeparatorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorCell.swift; sourceTree = ""; };
+ 431DE890228D619C00FACA74 /* PostsForTopicCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsForTopicCollectionViewController.swift; sourceTree = ""; };
+ 433A866422DDD3510055F931 /* RemoteCommandDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteCommandDataSource.swift; sourceTree = ""; };
+ 433A866622DDD3720055F931 /* RemoteCommandManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteCommandManager.swift; sourceTree = ""; };
+ 43476C9622DDA8A90032ABD5 /* PlaybackSpeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybackSpeed.swift; sourceTree = ""; };
+ 43476C9C22DDBD770032ABD5 /* ForumThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForumThread.swift; sourceTree = ""; };
+ 43476C9E22DDBDB90032ABD5 /* ForumThreadLite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForumThreadLite.swift; sourceTree = ""; };
+ 43476CA122DDD1AB0032ABD5 /* AssetPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetPlayer.swift; sourceTree = ""; };
+ 43476CA322DDD1D20032ABD5 /* Asset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Asset.swift; sourceTree = ""; };
+ 43476CA522DDD2190032ABD5 /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = ""; };
+ 4359B94322C73B4C009704F8 /* KoalaTeaFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KoalaTeaFlowLayout.swift; sourceTree = ""; };
+ 4359B94522C7494D009704F8 /* AudioPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerView.swift; sourceTree = ""; };
+ 435BAF3922783B7C00762891 /* EpisodeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpisodeViewController.swift; sourceTree = ""; };
+ 435BAF3B2278430900762891 /* EpisodeHeaderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpisodeHeaderCell.swift; sourceTree = ""; };
+ 436317D822C38B5F0091DA8C /* MainFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlowCoordinator.swift; sourceTree = ""; };
+ 436317DB22C38C590091DA8C /* RootViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; };
+ 436317DD22C38DB50091DA8C /* MainTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarController.swift; sourceTree = ""; };
+ 436317DF22C3993F0091DA8C /* OverlayViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OverlayViewController.swift; sourceTree = ""; };
+ 436317E322C39A8A0091DA8C /* StateController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StateController.swift; sourceTree = ""; };
+ 4381367C229FFCC4008043B2 /* UIColor+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Extensions.swift"; sourceTree = ""; };
+ 4398EA2F22AE58BF002F22F0 /* LabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelCell.swift; sourceTree = ""; };
+ 439BCC6B22802EDC008D808B /* CurrentlyPlaying.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentlyPlaying.swift; sourceTree = ""; };
+ 439BCC6D2280CD6B008D808B /* CommentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentCell.swift; sourceTree = ""; };
+ 439BCC7422818F9D008D808B /* ProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewController.swift; sourceTree = ""; };
+ 43A680CF2270718600A639A9 /* Debouncer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Debouncer.swift; sourceTree = ""; };
+ 43A680D122707DC000A639A9 /* DownloadService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadService.swift; sourceTree = ""; };
+ 43A680D32270803700A639A9 /* BookmarkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkService.swift; sourceTree = ""; };
+ 43AA2C902268530C0050668B /* ItemCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemCollectionViewCell.swift; sourceTree = ""; };
+ 43AA2C932268AC7B0050668B /* Roboto-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Light.ttf"; sourceTree = ""; };
+ 43AA2C942268AC7B0050668B /* Roboto-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Bold.ttf"; sourceTree = ""; };
+ 43AA2C952268AC7B0050668B /* Roboto-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Roboto-Regular.ttf"; sourceTree = ""; };
+ 43AA2C992268AEE50050668B /* OpenSans-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Light.ttf"; sourceTree = ""; };
+ 43AA2C9D2268B1FD0050668B /* OpenSans-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Regular.ttf"; sourceTree = ""; };
+ 43AA2C9F2268B2660050668B /* OpenSans-Semibold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Semibold.ttf"; sourceTree = ""; };
+ 43AD7116228AF08B00E930BD /* TagsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagsCell.swift; sourceTree = ""; };
+ 43AD7118228B05A400E930BD /* Topic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Topic.swift; sourceTree = ""; };
+ 43BA7BF7228452A4000E1171 /* NotificationsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsController.swift; sourceTree = ""; };
+ 43C0C76122798635007A92E7 /* ActionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionView.swift; sourceTree = ""; };
+ 43C0C763227AE7D1007A92E7 /* WebViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewCell.swift; sourceTree = ""; };
+ 43CE140B225F7EF700B57CFA /* PlayProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayProgress.swift; sourceTree = ""; };
+ 43CE140D226070FB00B57CFA /* PlayProgressModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayProgressModelController.swift; sourceTree = ""; };
+ 43CE451D2293E85C0048426A /* Haptics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Haptics.swift; sourceTree = ""; };
+ 43CE45202293ECFC0048426A /* DownloadsCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadsCollectionViewController.swift; sourceTree = ""; };
+ 43CE45222293F14B0048426A /* DownloadsViewModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadsViewModelController.swift; sourceTree = ""; };
+ 43CE8E0C2271AFC000DD990F /* HtmlHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HtmlHelper.swift; sourceTree = ""; };
+ 43F4591E226F27BA00641705 /* UpvoteService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpvoteService.swift; sourceTree = ""; };
675FBEB71FD81FBA8767227A /* Pods-SEDaily-IOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SEDaily-IOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS.release.xcconfig"; sourceTree = ""; };
+ 96004ACD20A9E0030017230F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
+ 960BFEBA202109800073DAB2 /* AskForReview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskForReview.swift; sourceTree = ""; };
+ 960BFEBE20226B620073DAB2 /* CommentsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsViewController.swift; sourceTree = ""; };
+ 960BFEC220239F0E0073DAB2 /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; };
+ 960BFEC42023C1330073DAB2 /* CommentsResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsResponse.swift; sourceTree = ""; };
+ 9610313D20A353B400A2D2D5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; };
+ 962F5364201E3C7900897A6E /* RelatedLinksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelatedLinksViewController.swift; sourceTree = ""; };
+ 964090BE2093B97D00CFF5C4 /* PodcastLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastLite.swift; sourceTree = ""; };
+ 965E165720ABD74900F2E4E4 /* FeedItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItem.swift; sourceTree = ""; };
+ 96600311201CEBBD00997795 /* RelatedLinks.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = RelatedLinks.storyboard; sourceTree = ""; };
+ 9662FC0920AF21FA00CFA8DF /* BaseFeedItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseFeedItem.swift; sourceTree = ""; };
+ 9672AA51202929C90020981F /* Author.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Author.swift; sourceTree = ""; };
+ 96BD1C87208E9497006C5E1D /* TestHookBool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHookBool.swift; sourceTree = ""; };
+ 96F35744201BFB0200E8B6E9 /* RelatedLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelatedLink.swift; sourceTree = ""; };
995F64385352A79BA0DF7DEB /* Pods-SEDaily-IOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SEDaily-IOSTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests.debug.xcconfig"; sourceTree = ""; };
9FDA28C254F62BB468401B75 /* Pods-SEDaily-IOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SEDaily-IOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS.debug.xcconfig"; sourceTree = ""; };
A2EFA433B346D70E958FFC73 /* Pods-SEDaily-IOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SEDaily-IOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests.release.xcconfig"; sourceTree = ""; };
A3651E5B02B83E392546E167 /* Pods_SEDaily_IOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SEDaily_IOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C0109D982013ECE0008BDA69 /* upvote_success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = upvote_success.json; sourceTree = ""; };
+ C0109D9A2013F064008BDA69 /* upvote_failure.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = upvote_failure.json; sourceTree = ""; };
+ C0109D9D2013F629008BDA69 /* LoginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTests.swift; sourceTree = ""; };
+ C0109D9F2013F6A5008BDA69 /* RegisterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterTests.swift; sourceTree = ""; };
+ C0109DA12013F6D8008BDA69 /* PostsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsTests.swift; sourceTree = ""; };
+ C015CB16201132DE00C6FD82 /* register_userexists.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = register_userexists.json; sourceTree = ""; };
+ C015CB182011373000C6FD82 /* register_success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = register_success.json; sourceTree = ""; };
+ C015CB1A2011388C00C6FD82 /* register_emptyusernamepass.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = register_emptyusernamepass.json; sourceTree = ""; };
+ C015CB1D20113CAB00C6FD82 /* getPostsWith_success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = getPostsWith_success.json; sourceTree = ""; };
+ C04C37FC200E94AE00C6EFC6 /* login_success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = login_success.json; sourceTree = ""; };
+ C04C37FF200EA6F400C6EFC6 /* login_wrongpass.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = login_wrongpass.json; sourceTree = ""; };
+ C04C3801200EA99200C6EFC6 /* login_nonexistinguser.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = login_nonexistinguser.json; sourceTree = ""; };
+ C0590D77200AC2A500A00E4D /* NetworkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkService.swift; sourceTree = ""; };
+ C0590D79200AD36400A00E4D /* VotingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingTests.swift; sourceTree = ""; };
+ C05DA1D82013FA34003C631F /* getPosts_topPosts.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = getPosts_topPosts.json; sourceTree = ""; };
+ C079B6531FCA07F800B4B304 /* HelpersTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpersTests.swift; sourceTree = ""; };
+ C0E64BB31FCB3F9100753AF0 /* UserModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserModelTests.swift; sourceTree = ""; };
+ C0E64BB61FCB406000753AF0 /* UserDefaultsMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsMock.swift; sourceTree = ""; };
DF0C9F051C6C2F8638D2ABF8 /* Pods_SEDaily_IOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SEDaily_IOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -127,9 +311,26 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 017074222071938D002E6E3C /* Notifications */ = {
+ isa = PBXGroup;
+ children = (
+ 43BA7BF7228452A4000E1171 /* NotificationsController.swift */,
+ );
+ name = Notifications;
+ sourceTree = "";
+ };
+ 161791FA1FC4DA5800A1287E /* Offline Downloads */ = {
+ isa = PBXGroup;
+ children = (
+ 161791FB1FC4DA7200A1287E /* OfflineDownloadsManager.swift */,
+ );
+ name = "Offline Downloads";
+ sourceTree = "";
+ };
16307FC81F8FDCE4001783CB /* PodcastModels */ = {
isa = PBXGroup;
children = (
+ 43AD7118228B05A400E930BD /* Topic.swift */,
16AD3E0B1F9B13EE0084C545 /* FilterObject.swift */,
16307FC91F8FDD02001783CB /* Podcast.swift */,
16AD3E0D1F9B14130084C545 /* PodcastDataSource.swift */,
@@ -145,8 +346,8 @@
children = (
165484541F902D3F005AEA23 /* GeneralCollectionViewController.swift */,
16FA84021F8D323700A45D9B /* SkeletonCollectionView.swift */,
- 16307FC81F8FDCE4001783CB /* PodcastModels */,
16AD3E001F9A975F0084C545 /* PodcastDetail */,
+ 16307FC81F8FDCE4001783CB /* PodcastModels */,
);
name = Podcasts;
sourceTree = "";
@@ -154,6 +355,9 @@
164FE9E21F02EE71009419CA /* CommonModels */ = {
isa = PBXGroup;
children = (
+ 961A378B208FAFC30050EF80 /* Feed */,
+ 96B6168520C0861300DF3CF6 /* Thread */,
+ 961A378A208FAF3E0050EF80 /* Author */,
164FE9E61F02F02F009419CA /* UserModel.swift */,
);
name = CommonModels;
@@ -162,12 +366,23 @@
164FE9E31F02EE77009419CA /* Helpers */ = {
isa = PBXGroup;
children = (
+ 162FFD3F1FBE200E0026288D /* DiskKeys.swift */,
164FE9E81F02F049009419CA /* Stylesheet.swift */,
164FE9EA1F02F340009419CA /* Helpers.swift */,
164FE9EC1F02F7E2009419CA /* UIButtonExtension.swift */,
164FE9EE1F03065C009419CA /* NavigationControllerExtension.swift */,
166036201F266FF300A22B7B /* Notifications.swift */,
16D67C491F33AC620065E838 /* AnswersTracker.swift */,
+ 1E638E551FC794AC00A29BDC /* ProgressIndicator.swift */,
+ 960BFEBA202109800073DAB2 /* AskForReview.swift */,
+ 9610313D20A353B400A2D2D5 /* AnalyticsHelper.swift */,
+ 43A680CF2270718600A639A9 /* Debouncer.swift */,
+ 43CE8E0C2271AFC000DD990F /* HtmlHelper.swift */,
+ 439BCC6B22802EDC008D808B /* CurrentlyPlaying.swift */,
+ 43CE451D2293E85C0048426A /* Haptics.swift */,
+ 4381367C229FFCC4008043B2 /* UIColor+Extensions.swift */,
+ 430FF9C822B2FEF60033A15A /* URLSchemaHelper.swift */,
+ 43476C9622DDA8A90032ABD5 /* PlaybackSpeed.swift */,
);
name = Helpers;
sourceTree = "";
@@ -195,21 +410,35 @@
1686FBFF1F009EC00088A6C1 /* SEDaily-IOS */ = {
isa = PBXGroup;
children = (
- 169806A41F8EF08F0075D8AD /* Constants */,
- 1686FC0C1F009EC00088A6C1 /* Info.plist */,
- 164FE9E41F02EE83009419CA /* API.swift */,
1686FC001F009EC00088A6C1 /* AppDelegate.swift */,
- 1E44AF051F87B08D00221B22 /* Localizable.strings */,
- 1686FC071F009EC00088A6C1 /* Assets.xcassets */,
+ 436317DA22C38C050091DA8C /* Screens and navigation flow */,
+ 43476CA022DDBF4C0032ABD5 /* Network */,
+ 43CE451F2293ECCB0048426A /* Downloads */,
+ 43C3B92D228C434A00D884FD /* Topic */,
+ 439BCC6F22818F32008D808B /* Profile */,
+ 43F4591D226F279F00641705 /* Services */,
+ 960BFEBD20226B420073DAB2 /* Comments */,
+ 96600306201CE9F900997795 /* RelatedLinks */,
+ 017074222071938D002E6E3C /* Notifications */,
+ 161791FA1FC4DA5800A1287E /* Offline Downloads */,
+ 1688CB4A2006BDCE00440095 /* Stripe */,
16AD3E011F9B06480084C545 /* Audio */,
16AD3E071F9B07520084C545 /* Auth */,
- 16AD3E061F9B07320084C545 /* CommonVCs */,
+ 164FE9DF1F02EE4E009419CA /* Podcasts */,
+ 16AD3E031F9B06950084C545 /* Search */,
+ 1E2BFDCE2017D91200E6DE0A /* Bookmark */,
16AD3E051F9B07160084C545 /* CommonCells */,
164FE9E21F02EE71009419CA /* CommonModels */,
+ 16AD3E061F9B07320084C545 /* CommonVCs */,
+ 169806A41F8EF08F0075D8AD /* Constants */,
16AD3E081F9B07A70084C545 /* Core */,
+ 1EABD8F01FB430AA00959859 /* Debug */,
164FE9E31F02EE77009419CA /* Helpers */,
- 164FE9DF1F02EE4E009419CA /* Podcasts */,
- 16AD3E031F9B06950084C545 /* Search */,
+ 439913D722C9F0570061EE6E /* Vendor */,
+ 1686FC0C1F009EC00088A6C1 /* Info.plist */,
+ 96004ACD20A9E0030017230F /* GoogleService-Info.plist */,
+ 1E44AF051F87B08D00221B22 /* Localizable.strings */,
+ 1686FC071F009EC00088A6C1 /* Assets.xcassets */,
);
path = "SEDaily-IOS";
sourceTree = "";
@@ -217,12 +446,27 @@
1686FC141F009EC00088A6C1 /* SEDaily-IOSTests */ = {
isa = PBXGroup;
children = (
- 1686FC151F009EC00088A6C1 /* SEDaily_IOSTests.swift */,
+ C0109D9C2013F538008BDA69 /* APITests */,
+ C0E64BB51FCB404B00753AF0 /* Mocks */,
+ 1686FC151F009EC00088A6C1 /* SEDailyIOSTests.swift */,
1686FC171F009EC00088A6C1 /* Info.plist */,
+ C079B6531FCA07F800B4B304 /* HelpersTests.swift */,
+ C0E64BB31FCB3F9100753AF0 /* UserModelTests.swift */,
);
path = "SEDaily-IOSTests";
sourceTree = "";
};
+ 1688CB4A2006BDCE00440095 /* Stripe */ = {
+ isa = PBXGroup;
+ children = (
+ 1671BD57200D361900E6ED3B /* SubscriptionModel.swift */,
+ 1688CB4B2006BDDA00440095 /* APIStripeExtension.swift */,
+ 1671BD55200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift */,
+ 1671BD59200D3D7800E6ED3B /* SubscriptionStatusViewController.swift */,
+ );
+ name = Stripe;
+ sourceTree = "";
+ };
169806A41F8EF08F0075D8AD /* Constants */ = {
isa = PBXGroup;
children = (
@@ -234,9 +478,11 @@
16AD3E001F9A975F0084C545 /* PodcastDetail */ = {
isa = PBXGroup;
children = (
- 167AFAB61F043F1100A1332F /* HeaderView.swift */,
- 16CE69901F9807CF0057BAC3 /* PodcastDescriptionView.swift */,
- 16CE698E1F98029E0057BAC3 /* PodcastDetailViewController.swift */,
+ 435BAF3922783B7C00762891 /* EpisodeViewController.swift */,
+ 435BAF3B2278430900762891 /* EpisodeHeaderCell.swift */,
+ 43C0C763227AE7D1007A92E7 /* WebViewCell.swift */,
+ 43C0C76122798635007A92E7 /* ActionView.swift */,
+ 43AD7116228AF08B00E930BD /* TagsCell.swift */,
);
name = PodcastDetail;
sourceTree = "";
@@ -244,8 +490,10 @@
16AD3E011F9B06480084C545 /* Audio */ = {
isa = PBXGroup;
children = (
- 16B147B01F16BF9C00433A42 /* AudioViewManager.swift */,
- 16D766B91F06B4850066C143 /* AudioView.swift */,
+ 436317DF22C3993F0091DA8C /* OverlayViewController.swift */,
+ 4359B94522C7494D009704F8 /* AudioPlayerView.swift */,
+ 43CE140B225F7EF700B57CFA /* PlayProgress.swift */,
+ 43CE140D226070FB00B57CFA /* PlayProgressModelController.swift */,
);
name = Audio;
sourceTree = "";
@@ -253,7 +501,7 @@
16AD3E031F9B06950084C545 /* Search */ = {
isa = PBXGroup;
children = (
- 161F3DE51F61F73D00A8F825 /* SearchTableViewController.swift */,
+ 161F3DE51F61F73D00A8F825 /* SearchCollectionViewController.swift */,
);
name = Search;
sourceTree = "";
@@ -261,8 +509,7 @@
16AD3E051F9B07160084C545 /* CommonCells */ = {
isa = PBXGroup;
children = (
- 161F3DE91F62703100A8F825 /* PodcastTableViewCell.swift */,
- 164FE9DB1F02DAB5009419CA /* PodcastCollectionViewCell.swift */,
+ 43AA2C902268530C0050668B /* ItemCollectionViewCell.swift */,
);
name = CommonCells;
sourceTree = "";
@@ -270,9 +517,7 @@
16AD3E061F9B07320084C545 /* CommonVCs */ = {
isa = PBXGroup;
children = (
- 164C71041F021AC8003803BC /* CustomTabViewController.swift */,
01BB1D6C1F29999E004A912E /* PodcastPageViewController.swift */,
- 1649A7891F204EC6005C4A6E /* ContainerViewController.swift */,
);
name = CommonVCs;
sourceTree = "";
@@ -294,6 +539,136 @@
name = Core;
sourceTree = "";
};
+ 1E2BFDCE2017D91200E6DE0A /* Bookmark */ = {
+ isa = PBXGroup;
+ children = (
+ 1E706BD11FD620B100D44AB2 /* BookmarkCollectionViewController.swift */,
+ 1EB74FFB1FE5E1AF004B733E /* StateBookmarkView.swift */,
+ 1E706BD31FD62E0300D44AB2 /* BookmarkViewModelController.swift */,
+ );
+ name = Bookmark;
+ sourceTree = "";
+ };
+ 1EABD8F01FB430AA00959859 /* Debug */ = {
+ isa = PBXGroup;
+ children = (
+ 1EABD8F11FB430AA00959859 /* Debug.storyboard */,
+ 96BD1C87208E9497006C5E1D /* TestHookBool.swift */,
+ 1EABD8F21FB430AA00959859 /* DebugTabViewController.swift */,
+ 1E2BFDCC2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift */,
+ 1EABD8F31FB430AA00959859 /* TestHook.swift */,
+ 1E286DE81FE4C65200644C1D /* TestHookEvent.swift */,
+ 1E286DE21FE4C5BA00644C1D /* TestHookEventTableViewCell.swift */,
+ 1E286DE41FE4C63200644C1D /* TestHookManager.swift */,
+ );
+ path = Debug;
+ sourceTree = "";
+ };
+ 433A866322DDD3390055F931 /* RemoteCommand */ = {
+ isa = PBXGroup;
+ children = (
+ 433A866422DDD3510055F931 /* RemoteCommandDataSource.swift */,
+ 433A866622DDD3720055F931 /* RemoteCommandManager.swift */,
+ );
+ name = RemoteCommand;
+ sourceTree = "";
+ };
+ 43476CA022DDBF4C0032ABD5 /* Network */ = {
+ isa = PBXGroup;
+ children = (
+ C0590D77200AC2A500A00E4D /* NetworkService.swift */,
+ 164FE9E41F02EE83009419CA /* API.swift */,
+ );
+ name = Network;
+ sourceTree = "";
+ };
+ 436317D722C38B1B0091DA8C /* Coordinators */ = {
+ isa = PBXGroup;
+ children = (
+ 436317D822C38B5F0091DA8C /* MainFlowCoordinator.swift */,
+ );
+ name = Coordinators;
+ sourceTree = "";
+ };
+ 436317DA22C38C050091DA8C /* Screens and navigation flow */ = {
+ isa = PBXGroup;
+ children = (
+ 436317D722C38B1B0091DA8C /* Coordinators */,
+ 436317DB22C38C590091DA8C /* RootViewController.swift */,
+ 436317DD22C38DB50091DA8C /* MainTabBarController.swift */,
+ 436317E322C39A8A0091DA8C /* StateController.swift */,
+ );
+ name = "Screens and navigation flow";
+ sourceTree = "";
+ };
+ 439913D722C9F0570061EE6E /* Vendor */ = {
+ isa = PBXGroup;
+ children = (
+ 433A866322DDD3390055F931 /* RemoteCommand */,
+ 43AA2C922268AC3B0050668B /* fonts */,
+ 4359B94322C73B4C009704F8 /* KoalaTeaFlowLayout.swift */,
+ 43476CA122DDD1AB0032ABD5 /* AssetPlayer.swift */,
+ 43476CA322DDD1D20032ABD5 /* Asset.swift */,
+ 43476CA522DDD2190032ABD5 /* PlayerView.swift */,
+ );
+ name = Vendor;
+ sourceTree = "";
+ };
+ 439BCC6F22818F32008D808B /* Profile */ = {
+ isa = PBXGroup;
+ children = (
+ 439BCC7422818F9D008D808B /* ProfileViewController.swift */,
+ 43086E3022A67F4B00B8B65B /* ProfileTableViewDataSource.swift */,
+ 43086E3222A7AD2400B8B65B /* SummaryCell.swift */,
+ 43086E3422A7C7CB00B8B65B /* User+ProfileViewController.Section.swift */,
+ 43086E3622A85C7A00B8B65B /* AvatarCell.swift */,
+ 43086E3A22A8EAF800B8B65B /* SwitchCell.swift */,
+ 431135D322AA2E2B00BFC910 /* SeparatorCell.swift */,
+ 4398EA2F22AE58BF002F22F0 /* LabelCell.swift */,
+ );
+ name = Profile;
+ sourceTree = "";
+ };
+ 43AA2C922268AC3B0050668B /* fonts */ = {
+ isa = PBXGroup;
+ children = (
+ 43AA2C942268AC7B0050668B /* Roboto-Bold.ttf */,
+ 43AA2C992268AEE50050668B /* OpenSans-Light.ttf */,
+ 43AA2C932268AC7B0050668B /* Roboto-Light.ttf */,
+ 43AA2C9F2268B2660050668B /* OpenSans-Semibold.ttf */,
+ 43AA2C9D2268B1FD0050668B /* OpenSans-Regular.ttf */,
+ 43AA2C952268AC7B0050668B /* Roboto-Regular.ttf */,
+ );
+ name = fonts;
+ sourceTree = "";
+ };
+ 43C3B92D228C434A00D884FD /* Topic */ = {
+ isa = PBXGroup;
+ children = (
+ 431DE890228D619C00FACA74 /* PostsForTopicCollectionViewController.swift */,
+ );
+ name = Topic;
+ sourceTree = "";
+ };
+ 43CE451F2293ECCB0048426A /* Downloads */ = {
+ isa = PBXGroup;
+ children = (
+ 43CE45202293ECFC0048426A /* DownloadsCollectionViewController.swift */,
+ 43CE45222293F14B0048426A /* DownloadsViewModelController.swift */,
+ );
+ name = Downloads;
+ sourceTree = "";
+ };
+ 43F4591D226F279F00641705 /* Services */ = {
+ isa = PBXGroup;
+ children = (
+ 43F4591E226F27BA00641705 /* UpvoteService.swift */,
+ 43A680D122707DC000A639A9 /* DownloadService.swift */,
+ 43A680D32270803700A639A9 /* BookmarkService.swift */,
+ );
+ name = Services;
+ sourceTree = "";
+ };
4E74333675FE5899EC260076 /* Pods */ = {
isa = PBXGroup;
children = (
@@ -305,6 +680,115 @@
name = Pods;
sourceTree = "";
};
+ 960BFEBD20226B420073DAB2 /* Comments */ = {
+ isa = PBXGroup;
+ children = (
+ 960BFEBE20226B620073DAB2 /* CommentsViewController.swift */,
+ 960BFEC42023C1330073DAB2 /* CommentsResponse.swift */,
+ 960BFEC220239F0E0073DAB2 /* Comment.swift */,
+ 439BCC6D2280CD6B008D808B /* CommentCell.swift */,
+ );
+ name = Comments;
+ sourceTree = "";
+ };
+ 961A378A208FAF3E0050EF80 /* Author */ = {
+ isa = PBXGroup;
+ children = (
+ 9672AA51202929C90020981F /* Author.swift */,
+ );
+ name = Author;
+ sourceTree = "";
+ };
+ 961A378B208FAFC30050EF80 /* Feed */ = {
+ isa = PBXGroup;
+ children = (
+ 964090BE2093B97D00CFF5C4 /* PodcastLite.swift */,
+ 965E165720ABD74900F2E4E4 /* FeedItem.swift */,
+ 9662FC0920AF21FA00CFA8DF /* BaseFeedItem.swift */,
+ );
+ name = Feed;
+ sourceTree = "";
+ };
+ 96600306201CE9F900997795 /* RelatedLinks */ = {
+ isa = PBXGroup;
+ children = (
+ 96F35744201BFB0200E8B6E9 /* RelatedLink.swift */,
+ 96600311201CEBBD00997795 /* RelatedLinks.storyboard */,
+ 962F5364201E3C7900897A6E /* RelatedLinksViewController.swift */,
+ );
+ name = RelatedLinks;
+ sourceTree = "";
+ };
+ 96B6168520C0861300DF3CF6 /* Thread */ = {
+ isa = PBXGroup;
+ children = (
+ 43476C9E22DDBDB90032ABD5 /* ForumThreadLite.swift */,
+ 43476C9C22DDBD770032ABD5 /* ForumThread.swift */,
+ );
+ name = Thread;
+ sourceTree = "";
+ };
+ C0109D9C2013F538008BDA69 /* APITests */ = {
+ isa = PBXGroup;
+ children = (
+ C0590D79200AD36400A00E4D /* VotingTests.swift */,
+ C0109D9D2013F629008BDA69 /* LoginTests.swift */,
+ C0109D9F2013F6A5008BDA69 /* RegisterTests.swift */,
+ C0109DA12013F6D8008BDA69 /* PostsTests.swift */,
+ );
+ path = APITests;
+ sourceTree = "";
+ };
+ C015CB15201132C600C6FD82 /* register */ = {
+ isa = PBXGroup;
+ children = (
+ C015CB16201132DE00C6FD82 /* register_userexists.json */,
+ C015CB182011373000C6FD82 /* register_success.json */,
+ C015CB1A2011388C00C6FD82 /* register_emptyusernamepass.json */,
+ );
+ path = register;
+ sourceTree = "";
+ };
+ C015CB1C20113C9800C6FD82 /* posts */ = {
+ isa = PBXGroup;
+ children = (
+ C015CB1D20113CAB00C6FD82 /* getPostsWith_success.json */,
+ C0109D982013ECE0008BDA69 /* upvote_success.json */,
+ C0109D9A2013F064008BDA69 /* upvote_failure.json */,
+ C05DA1D82013FA34003C631F /* getPosts_topPosts.json */,
+ );
+ path = posts;
+ sourceTree = "";
+ };
+ C04C37FB200E948F00C6EFC6 /* Responses */ = {
+ isa = PBXGroup;
+ children = (
+ C015CB1C20113C9800C6FD82 /* posts */,
+ C015CB15201132C600C6FD82 /* register */,
+ C04C37FE200EA5D000C6EFC6 /* login */,
+ );
+ path = Responses;
+ sourceTree = "";
+ };
+ C04C37FE200EA5D000C6EFC6 /* login */ = {
+ isa = PBXGroup;
+ children = (
+ C04C37FC200E94AE00C6EFC6 /* login_success.json */,
+ C04C37FF200EA6F400C6EFC6 /* login_wrongpass.json */,
+ C04C3801200EA99200C6EFC6 /* login_nonexistinguser.json */,
+ );
+ path = login;
+ sourceTree = "";
+ };
+ C0E64BB51FCB404B00753AF0 /* Mocks */ = {
+ isa = PBXGroup;
+ children = (
+ C04C37FB200E948F00C6EFC6 /* Responses */,
+ C0E64BB61FCB406000753AF0 /* UserDefaultsMock.swift */,
+ );
+ path = Mocks;
+ sourceTree = "";
+ };
E6ABCD02C9CBA1E6E09EB4DE /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -322,13 +806,13 @@
buildConfigurationList = 1686FC1A1F009EC00088A6C1 /* Build configuration list for PBXNativeTarget "SEDaily-IOS" */;
buildPhases = (
6A12E8C003C75BEEE01B2AA0 /* [CP] Check Pods Manifest.lock */,
+ 169806A21F8EED850075D8AD /* Swiftgen Localize Strings Script */,
1686FBF91F009EC00088A6C1 /* Sources */,
1686FBFA1F009EC00088A6C1 /* Frameworks */,
1686FBFB1F009EC00088A6C1 /* Resources */,
AE5F616C12D0339AD2CE40F0 /* [CP] Embed Pods Frameworks */,
- 4B6DBB81C87D23ABC98202EB /* [CP] Copy Pods Resources */,
16D67C4B1F33AD1D0065E838 /* ShellScript */,
- 169806A21F8EED850075D8AD /* Swiftgen Localize Strings Script */,
+ 1E884C331FA428D400400781 /* SwiftLint */,
);
buildRules = (
);
@@ -348,7 +832,6 @@
1686FC0E1F009EC00088A6C1 /* Frameworks */,
1686FC0F1F009EC00088A6C1 /* Resources */,
43BA1A9ED42DE22C48E64092 /* [CP] Embed Pods Frameworks */,
- 8836A870BF4FA6C98035B298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -372,7 +855,6 @@
TargetAttributes = {
1686FBFC1F009EC00088A6C1 = {
CreatedOnToolsVersion = 8.3.2;
- DevelopmentTeam = 6TY8WC8WPP;
LastSwiftMigration = 0900;
ProvisioningStyle = Automatic;
SystemCapabilities = {
@@ -391,10 +873,11 @@
};
};
buildConfigurationList = 1686FBF81F009EC00088A6C1 /* Build configuration list for PBXProject "SEDaily-IOS" */;
- compatibilityVersion = "Xcode 3.2";
+ compatibilityVersion = "Xcode 8.0";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
+ English,
en,
Base,
fr,
@@ -415,10 +898,19 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 43AA2C972268AC7B0050668B /* Roboto-Bold.ttf in Resources */,
+ 43AA2C9B2268AEE50050668B /* OpenSans-Light.ttf in Resources */,
+ 43AA2C962268AC7B0050668B /* Roboto-Light.ttf in Resources */,
+ 96600312201CEBBD00997795 /* RelatedLinks.storyboard in Resources */,
+ 43AA2C9E2268B1FD0050668B /* OpenSans-Regular.ttf in Resources */,
+ 96004ACE20A9E0030017230F /* GoogleService-Info.plist in Resources */,
1686FC0B1F009EC00088A6C1 /* LaunchScreen.storyboard in Resources */,
+ 43AA2C982268AC7B0050668B /* Roboto-Regular.ttf in Resources */,
+ 1EABD8F41FB430AB00959859 /* Debug.storyboard in Resources */,
1E44AF031F87B08D00221B22 /* Localizable.strings in Resources */,
1686FC081F009EC00088A6C1 /* Assets.xcassets in Resources */,
1686FC061F009EC00088A6C1 /* Main.storyboard in Resources */,
+ 43AA2CA02268B2660050668B /* OpenSans-Semibold.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -426,6 +918,16 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ C0109D9B2013F064008BDA69 /* upvote_failure.json in Resources */,
+ C015CB192011373000C6FD82 /* register_success.json in Resources */,
+ C015CB1B2011388C00C6FD82 /* register_emptyusernamepass.json in Resources */,
+ C015CB1E20113CAB00C6FD82 /* getPostsWith_success.json in Resources */,
+ C04C3802200EA99200C6EFC6 /* login_nonexistinguser.json in Resources */,
+ C04C3800200EA6F400C6EFC6 /* login_wrongpass.json in Resources */,
+ C04C37FD200E94AE00C6EFC6 /* login_success.json in Resources */,
+ C0109D992013ECE0008BDA69 /* upvote_success.json in Resources */,
+ C05DA1D92013FA34003C631F /* getPosts_topPosts.json in Resources */,
+ C015CB17201132DE00C6FD82 /* register_userexists.json in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -477,34 +979,42 @@
shellPath = /bin/sh;
shellScript = "./Fabric.framework/run f0ec5c4da42e81dc990c190bf79ca81fd9fdcf7d 8f1f2cea85347d8df665cfe1460a1391be0d1c99e81197b80ef43259ec294b0d";
};
- 43BA1A9ED42DE22C48E64092 /* [CP] Embed Pods Frameworks */ = {
+ 1E884C331FA428D400400781 /* SwiftLint */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
- name = "[CP] Embed Pods Frameworks";
+ name = SwiftLint;
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
+ shellScript = "\"${PODS_ROOT}/SwiftLint/swiftlint\"";
};
- 4B6DBB81C87D23ABC98202EB /* [CP] Copy Pods Resources */ = {
+ 43BA1A9ED42DE22C48E64092 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/Mockingjay/Mockingjay.framework",
+ "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework",
+ "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework",
+ "${BUILT_PRODUCTS_DIR}/URITemplate/URITemplate.framework",
);
- name = "[CP] Copy Pods Resources";
+ name = "[CP] Embed Pods Frameworks";
outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Mockingjay.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/URITemplate.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS-resources.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
6A12E8C003C75BEEE01B2AA0 /* [CP] Check Pods Manifest.lock */ = {
@@ -525,79 +1035,72 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 8836A870BF4FA6C98035B298 /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Copy Pods Resources";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SEDaily-IOSTests/Pods-SEDaily-IOSTests-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
AE5F616C12D0339AD2CE40F0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "${SRCROOT}/Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS-frameworks.sh",
+ "${PODS_ROOT}/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/ActiveLabel/ActiveLabel.framework",
"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework",
"${BUILT_PRODUCTS_DIR}/Disk/Disk.framework",
+ "${BUILT_PRODUCTS_DIR}/Down/Down.framework",
"${BUILT_PRODUCTS_DIR}/Eureka/Eureka.framework",
+ "${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework",
"${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework",
"${BUILT_PRODUCTS_DIR}/KTResponsiveUI/KTResponsiveUI.framework",
- "${BUILT_PRODUCTS_DIR}/KoalaTeaFlowLayout/KoalaTeaFlowLayout.framework",
- "${BUILT_PRODUCTS_DIR}/KoalaTeaPlayer/KoalaTeaPlayer.framework",
+ "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework",
+ "${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework",
"${BUILT_PRODUCTS_DIR}/Pageboy/Pageboy.framework",
+ "${BUILT_PRODUCTS_DIR}/PopupDialog/PopupDialog.framework",
"${BUILT_PRODUCTS_DIR}/PureLayout/PureLayout.framework",
"${BUILT_PRODUCTS_DIR}/Reusable/Reusable.framework",
- "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
- "${BUILT_PRODUCTS_DIR}/SideMenu/SideMenu.framework",
"${BUILT_PRODUCTS_DIR}/Skeleton/Skeleton.framework",
"${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework",
- "${BUILT_PRODUCTS_DIR}/SwiftIcons/SwiftIcons.framework",
+ "${BUILT_PRODUCTS_DIR}/StatefulViewController/StatefulViewController.framework",
+ "${BUILT_PRODUCTS_DIR}/SwiftMoment/SwiftMoment.framework",
"${BUILT_PRODUCTS_DIR}/SwiftSoup/SwiftSoup.framework",
"${BUILT_PRODUCTS_DIR}/SwifterSwift/SwifterSwift.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyBeaver/SwiftyBeaver.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework",
"${BUILT_PRODUCTS_DIR}/Tabman/Tabman.framework",
- "${BUILT_PRODUCTS_DIR}/UIFontComplete/UIFontComplete.framework",
+ "${BUILT_PRODUCTS_DIR}/Tags/Tags.framework",
+ "${BUILT_PRODUCTS_DIR}/WaitForIt/WaitForIt.framework",
+ "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ActiveLabel.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Disk.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Down.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Eureka.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleToolboxForMac.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KTResponsiveUI.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KoalaTeaFlowLayout.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KoalaTeaPlayer.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Pageboy.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PopupDialog.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PureLayout.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reusable.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SideMenu.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Skeleton.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftIcons.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/StatefulViewController.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftMoment.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSoup.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwifterSwift.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyBeaver.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Tabman.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UIFontComplete.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Tags.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WaitForIt.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@@ -607,36 +1110,102 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 43476C9722DDA8A90032ABD5 /* PlaybackSpeed.swift in Sources */,
+ 9672AA52202929C90020981F /* Author.swift in Sources */,
+ 431DE891228D619D00FACA74 /* PostsForTopicCollectionViewController.swift in Sources */,
+ 439BCC6C22802EDC008D808B /* CurrentlyPlaying.swift in Sources */,
+ 43CE451E2293E85D0048426A /* Haptics.swift in Sources */,
+ 96F35745201BFB0200E8B6E9 /* RelatedLink.swift in Sources */,
+ 965E165820ABD74900F2E4E4 /* FeedItem.swift in Sources */,
+ 960BFEC320239F0E0073DAB2 /* Comment.swift in Sources */,
+ 43C0C764227AE7D1007A92E7 /* WebViewCell.swift in Sources */,
+ 43CE45212293ECFC0048426A /* DownloadsCollectionViewController.swift in Sources */,
+ 439BCC7522818F9D008D808B /* ProfileViewController.swift in Sources */,
+ 43476CA622DDD2190032ABD5 /* PlayerView.swift in Sources */,
+ 4398EA3022AE58BF002F22F0 /* LabelCell.swift in Sources */,
+ 43A680D222707DC000A639A9 /* DownloadService.swift in Sources */,
+ 43086E3522A7C7CB00B8B65B /* User+ProfileViewController.Section.swift in Sources */,
+ 43086E3B22A8EAF800B8B65B /* SwitchCell.swift in Sources */,
+ 43CE8E0D2271AFC000DD990F /* HtmlHelper.swift in Sources */,
+ 1671BD58200D361900E6ED3B /* SubscriptionModel.swift in Sources */,
+ 43086E3722A85C7A00B8B65B /* AvatarCell.swift in Sources */,
+ 1688CB4C2006BDDA00440095 /* APIStripeExtension.swift in Sources */,
+ 43A680D02270718600A639A9 /* Debouncer.swift in Sources */,
164FE9E11F02EE67009419CA /* LoginViewController.swift in Sources */,
- 1649A78A1F204EC6005C4A6E /* ContainerViewController.swift in Sources */,
+ 161791FC1FC4DA7200A1287E /* OfflineDownloadsManager.swift in Sources */,
+ 436317DE22C38DB50091DA8C /* MainTabBarController.swift in Sources */,
+ C0590D78200AC2A500A00E4D /* NetworkService.swift in Sources */,
+ 43CE140C225F7EF700B57CFA /* PlayProgress.swift in Sources */,
+ 43AA2C912268530C0050668B /* ItemCollectionViewCell.swift in Sources */,
+ 960BFEBB202109800073DAB2 /* AskForReview.swift in Sources */,
164FE9EF1F03065C009419CA /* NavigationControllerExtension.swift in Sources */,
165484551F902D3F005AEA23 /* GeneralCollectionViewController.swift in Sources */,
- 161F3DE61F61F73D00A8F825 /* SearchTableViewController.swift in Sources */,
- 167AFAB71F043F1100A1332F /* HeaderView.swift in Sources */,
+ 1E638E561FC794AC00A29BDC /* ProgressIndicator.swift in Sources */,
+ 43476C9F22DDBDB90032ABD5 /* ForumThreadLite.swift in Sources */,
+ 161F3DE61F61F73D00A8F825 /* SearchCollectionViewController.swift in Sources */,
+ 1E2BFDCD2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift in Sources */,
16D67C4A1F33AC620065E838 /* AnswersTracker.swift in Sources */,
164FE9E51F02EE83009419CA /* API.swift in Sources */,
164FE9E91F02F049009419CA /* Stylesheet.swift in Sources */,
- 16CE698F1F98029E0057BAC3 /* PodcastDetailViewController.swift in Sources */,
+ 436317E022C3993F0091DA8C /* OverlayViewController.swift in Sources */,
+ 960BFEBF20226B620073DAB2 /* CommentsViewController.swift in Sources */,
+ 43C0C76222798635007A92E7 /* ActionView.swift in Sources */,
+ 43476CA422DDD1D20032ABD5 /* Asset.swift in Sources */,
+ 43AD7119228B05A400E930BD /* Topic.swift in Sources */,
+ 43476C9D22DDBD770032ABD5 /* ForumThread.swift in Sources */,
+ 43476CA222DDD1AB0032ABD5 /* AssetPlayer.swift in Sources */,
+ 1671BD5A200D3D7800E6ED3B /* SubscriptionStatusViewController.swift in Sources */,
+ 96BD1C88208E9497006C5E1D /* TestHookBool.swift in Sources */,
+ 43CE140E226070FB00B57CFA /* PlayProgressModelController.swift in Sources */,
+ 1E286DE31FE4C5BA00644C1D /* TestHookEventTableViewCell.swift in Sources */,
+ 964090BF2093B97D00CFF5C4 /* PodcastLite.swift in Sources */,
+ 4359B94422C73B4C009704F8 /* KoalaTeaFlowLayout.swift in Sources */,
+ 43AD7117228AF08B00E930BD /* TagsCell.swift in Sources */,
+ 436317E422C39A8B0091DA8C /* StateController.swift in Sources */,
16AD3E0C1F9B13EE0084C545 /* FilterObject.swift in Sources */,
+ 43A680D42270803700A639A9 /* BookmarkService.swift in Sources */,
+ 1671BD56200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift in Sources */,
16AD3E0A1F9B138D0084C545 /* PodcastViewModel.swift in Sources */,
- 16B147B11F16BF9C00433A42 /* AudioViewManager.swift in Sources */,
- 164C71051F021AC8003803BC /* CustomTabViewController.swift in Sources */,
- 164FE9DC1F02DAB5009419CA /* PodcastCollectionViewCell.swift in Sources */,
- 16D766BA1F06B4850066C143 /* AudioView.swift in Sources */,
+ 43086E3322A7AD2400B8B65B /* SummaryCell.swift in Sources */,
+ 43F4591F226F27BB00641705 /* UpvoteService.swift in Sources */,
+ 435BAF3A22783B7C00762891 /* EpisodeViewController.swift in Sources */,
+ 430FF9C922B2FEF70033A15A /* URLSchemaHelper.swift in Sources */,
+ 962F5365201E3C7900897A6E /* RelatedLinksViewController.swift in Sources */,
+ 433A866522DDD3510055F931 /* RemoteCommandDataSource.swift in Sources */,
+ 43CE45232293F14B0048426A /* DownloadsViewModelController.swift in Sources */,
+ 1EABD8F51FB430AB00959859 /* DebugTabViewController.swift in Sources */,
+ 435BAF3C2278430900762891 /* EpisodeHeaderCell.swift in Sources */,
+ 1E286DE91FE4C65200644C1D /* TestHookEvent.swift in Sources */,
+ 439BCC6E2280CD6B008D808B /* CommentCell.swift in Sources */,
164FE9EB1F02F340009419CA /* Helpers.swift in Sources */,
16FA84031F8D323700A45D9B /* SkeletonCollectionView.swift in Sources */,
+ 431135D422AA2E2B00BFC910 /* SeparatorCell.swift in Sources */,
166036211F266FF300A22B7B /* Notifications.swift in Sources */,
169806A61F8EF3970075D8AD /* L10nEnum.swift in Sources */,
01BB1D6D1F29999E004A912E /* PodcastPageViewController.swift in Sources */,
- 16CE69911F9807CF0057BAC3 /* PodcastDescriptionView.swift in Sources */,
+ 436317D922C38B5F0091DA8C /* MainFlowCoordinator.swift in Sources */,
+ 162FFD401FBE200E0026288D /* DiskKeys.swift in Sources */,
16307FCC1F8FEE3A001783CB /* PodcastViewModelController.swift in Sources */,
16AD3E0E1F9B14130084C545 /* PodcastDataSource.swift in Sources */,
164FE9ED1F02F7E2009419CA /* UIButtonExtension.swift in Sources */,
+ 1EABD8F61FB430AB00959859 /* TestHook.swift in Sources */,
+ 9662FC0A20AF21FA00CFA8DF /* BaseFeedItem.swift in Sources */,
+ 1E286DE51FE4C63200644C1D /* TestHookManager.swift in Sources */,
+ 960BFEC52023C1330073DAB2 /* CommentsResponse.swift in Sources */,
+ 1E706BD21FD620B100D44AB2 /* BookmarkCollectionViewController.swift in Sources */,
+ 43086E3122A67F4B00B8B65B /* ProfileTableViewDataSource.swift in Sources */,
+ 4381367D229FFCC4008043B2 /* UIColor+Extensions.swift in Sources */,
+ 436317DC22C38C590091DA8C /* RootViewController.swift in Sources */,
16307FCA1F8FDD02001783CB /* Podcast.swift in Sources */,
+ 1EB74FFC1FE5E1AF004B733E /* StateBookmarkView.swift in Sources */,
16F3A1BA1F90918D00364709 /* PodcastRepository.swift in Sources */,
1686FC011F009EC00088A6C1 /* AppDelegate.swift in Sources */,
- 161F3DEA1F62703100A8F825 /* PodcastTableViewCell.swift in Sources */,
+ 9610313E20A353B400A2D2D5 /* AnalyticsHelper.swift in Sources */,
+ 433A866722DDD3720055F931 /* RemoteCommandManager.swift in Sources */,
+ 4359B94622C7494D009704F8 /* AudioPlayerView.swift in Sources */,
164FE9E71F02F02F009419CA /* UserModel.swift in Sources */,
+ 43BA7BF8228452A4000E1171 /* NotificationsController.swift in Sources */,
+ 1E706BD41FD62E0300D44AB2 /* BookmarkViewModelController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -644,7 +1213,15 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 1686FC161F009EC00088A6C1 /* SEDaily_IOSTests.swift in Sources */,
+ 1686FC161F009EC00088A6C1 /* SEDailyIOSTests.swift in Sources */,
+ C0109DA02013F6A5008BDA69 /* RegisterTests.swift in Sources */,
+ 1686FC161F009EC00088A6C1 /* SEDailyIOSTests.swift in Sources */,
+ C0E64BB41FCB3F9100753AF0 /* UserModelTests.swift in Sources */,
+ C0E64BB71FCB406000753AF0 /* UserDefaultsMock.swift in Sources */,
+ C0109D9E2013F629008BDA69 /* LoginTests.swift in Sources */,
+ C079B6541FCA07F800B4B304 /* HelpersTests.swift in Sources */,
+ C0590D7A200AD36500A00E4D /* VotingTests.swift in Sources */,
+ C0109DA22013F6D8008BDA69 /* PostsTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -806,17 +1383,21 @@
baseConfigurationReference = 9FDA28C254F62BB468401B75 /* Pods-SEDaily-IOS.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 13;
- DEVELOPMENT_TEAM = 6TY8WC8WPP;
+ CURRENT_PROJECT_VERSION = 10;
+ DEVELOPMENT_TEAM = 4J2Z86C4XD;
INFOPLIST_FILE = "SEDaily-IOS/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "koala-tea.SEDaily";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
@@ -825,17 +1406,21 @@
baseConfigurationReference = 675FBEB71FD81FBA8767227A /* Pods-SEDaily-IOS.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 13;
- DEVELOPMENT_TEAM = 6TY8WC8WPP;
+ CURRENT_PROJECT_VERSION = 10;
+ DEVELOPMENT_TEAM = 4J2Z86C4XD;
INFOPLIST_FILE = "SEDaily-IOS/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "koala-tea.SEDaily";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
@@ -843,14 +1428,14 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 995F64385352A79BA0DF7DEB /* Pods-SEDaily-IOSTests.debug.xcconfig */;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 6MS9QWALYV;
INFOPLIST_FILE = "SEDaily-IOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "koala-tea.SEDaily-IOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SEDaily-IOS.app/SEDaily-IOS";
};
@@ -860,14 +1445,14 @@
isa = XCBuildConfiguration;
baseConfigurationReference = A2EFA433B346D70E958FFC73 /* Pods-SEDaily-IOSTests.release.xcconfig */;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 6MS9QWALYV;
INFOPLIST_FILE = "SEDaily-IOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "koala-tea.SEDaily-IOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SEDaily-IOS.app/SEDaily-IOS";
};
diff --git a/SEDaily-IOS.xcodeproj/project.pbxproj.mergesave b/SEDaily-IOS.xcodeproj/project.pbxproj.mergesave
new file mode 100644
index 0000000..4751d07
--- /dev/null
+++ b/SEDaily-IOS.xcodeproj/project.pbxproj.mergesave
@@ -0,0 +1,1322 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 48;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 01516A04207310C900E9E743 /* NotificationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01516A03207310C900E9E743 /* NotificationTableViewCell.swift */; };
+ 01707421207192C0002E6E3C /* NotificationsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01707420207192C0002E6E3C /* NotificationsTableViewController.swift */; };
+ 01BB1D6D1F29999E004A912E /* PodcastPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01BB1D6C1F29999E004A912E /* PodcastPageViewController.swift */; };
+ 161791FC1FC4DA7200A1287E /* OfflineDownloadsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161791FB1FC4DA7200A1287E /* OfflineDownloadsManager.swift */; };
+ 161F3DE61F61F73D00A8F825 /* SearchTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161F3DE51F61F73D00A8F825 /* SearchTableViewController.swift */; };
+ 161F3DEA1F62703100A8F825 /* PodcastTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161F3DE91F62703100A8F825 /* PodcastTableViewCell.swift */; };
+ 162FFD401FBE200E0026288D /* DiskKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162FFD3F1FBE200E0026288D /* DiskKeys.swift */; };
+ 16307FCA1F8FDD02001783CB /* Podcast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16307FC91F8FDD02001783CB /* Podcast.swift */; };
+ 16307FCC1F8FEE3A001783CB /* PodcastViewModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16307FCB1F8FEE3A001783CB /* PodcastViewModelController.swift */; };
+ 1649A78A1F204EC6005C4A6E /* ContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1649A7891F204EC6005C4A6E /* ContainerViewController.swift */; };
+ 164C71051F021AC8003803BC /* CustomTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164C71041F021AC8003803BC /* CustomTabViewController.swift */; };
+ 164FE9DC1F02DAB5009419CA /* PodcastCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9DB1F02DAB5009419CA /* PodcastCollectionViewCell.swift */; };
+ 164FE9E11F02EE67009419CA /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E01F02EE67009419CA /* LoginViewController.swift */; };
+ 164FE9E51F02EE83009419CA /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E41F02EE83009419CA /* API.swift */; };
+ 164FE9E71F02F02F009419CA /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E61F02F02F009419CA /* UserModel.swift */; };
+ 164FE9E91F02F049009419CA /* Stylesheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9E81F02F049009419CA /* Stylesheet.swift */; };
+ 164FE9EB1F02F340009419CA /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9EA1F02F340009419CA /* Helpers.swift */; };
+ 164FE9ED1F02F7E2009419CA /* UIButtonExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9EC1F02F7E2009419CA /* UIButtonExtension.swift */; };
+ 164FE9EF1F03065C009419CA /* NavigationControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164FE9EE1F03065C009419CA /* NavigationControllerExtension.swift */; };
+ 165484551F902D3F005AEA23 /* GeneralCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165484541F902D3F005AEA23 /* GeneralCollectionViewController.swift */; };
+ 166036211F266FF300A22B7B /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 166036201F266FF300A22B7B /* Notifications.swift */; };
+ 1671BD56200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD55200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift */; };
+ 1671BD58200D361900E6ED3B /* SubscriptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD57200D361900E6ED3B /* SubscriptionModel.swift */; };
+ 1671BD5A200D3D7800E6ED3B /* SubscriptionStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671BD59200D3D7800E6ED3B /* SubscriptionStatusViewController.swift */; };
+ 167AFAB71F043F1100A1332F /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 167AFAB61F043F1100A1332F /* HeaderView.swift */; };
+ 1686FC011F009EC00088A6C1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1686FC001F009EC00088A6C1 /* AppDelegate.swift */; };
+ 1686FC061F009EC00088A6C1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC041F009EC00088A6C1 /* Main.storyboard */; };
+ 1686FC081F009EC00088A6C1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC071F009EC00088A6C1 /* Assets.xcassets */; };
+ 1686FC0B1F009EC00088A6C1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1686FC091F009EC00088A6C1 /* LaunchScreen.storyboard */; };
+ 1686FC161F009EC00088A6C1 /* SEDailyIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1686FC151F009EC00088A6C1 /* SEDailyIOSTests.swift */; };
+ 1688CB4C2006BDDA00440095 /* APIStripeExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1688CB4B2006BDDA00440095 /* APIStripeExtension.swift */; };
+ 169806A61F8EF3970075D8AD /* L10nEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169806A51F8EF08F0075D8AD /* L10nEnum.swift */; };
+ 16AD3E0A1F9B138D0084C545 /* PodcastViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E091F9B138D0084C545 /* PodcastViewModel.swift */; };
+ 16AD3E0C1F9B13EE0084C545 /* FilterObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E0B1F9B13EE0084C545 /* FilterObject.swift */; };
+ 16AD3E0E1F9B14130084C545 /* PodcastDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AD3E0D1F9B14130084C545 /* PodcastDataSource.swift */; };
+ 16B147B11F16BF9C00433A42 /* AudioOverlayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16B147B01F16BF9C00433A42 /* AudioOverlayViewController.swift */; };
+ 16CE698F1F98029E0057BAC3 /* PodcastDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CE698E1F98029E0057BAC3 /* PodcastDetailViewController.swift */; };
+ 16D67C4A1F33AC620065E838 /* AnswersTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16D67C491F33AC620065E838 /* AnswersTracker.swift */; };
+ 16D766BA1F06B4850066C143 /* AudioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16D766B91F06B4850066C143 /* AudioView.swift */; };
+ 16F3A1BA1F90918D00364709 /* PodcastRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F3A1B91F90918D00364709 /* PodcastRepository.swift */; };
+ 16FA84031F8D323700A45D9B /* SkeletonCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16FA84021F8D323700A45D9B /* SkeletonCollectionView.swift */; };
+ 1E286DE31FE4C5BA00644C1D /* TestHookEventTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE21FE4C5BA00644C1D /* TestHookEventTableViewCell.swift */; };
+ 1E286DE51FE4C63200644C1D /* TestHookManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE41FE4C63200644C1D /* TestHookManager.swift */; };
+ 1E286DE91FE4C65200644C1D /* TestHookEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E286DE81FE4C65200644C1D /* TestHookEvent.swift */; };
+ 1E2BFDCD2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2BFDCC2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift */; };
+ 1E44AF031F87B08D00221B22 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E44AF051F87B08D00221B22 /* Localizable.strings */; };
+ 1E638E561FC794AC00A29BDC /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E638E551FC794AC00A29BDC /* ProgressIndicator.swift */; };
+ 1E706BD21FD620B100D44AB2 /* BookmarkCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E706BD11FD620B100D44AB2 /* BookmarkCollectionViewController.swift */; };
+ 1E706BD41FD62E0300D44AB2 /* BookmarkViewModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E706BD31FD62E0300D44AB2 /* BookmarkViewModelController.swift */; };
+ 1EABD8F41FB430AB00959859 /* Debug.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1EABD8F11FB430AA00959859 /* Debug.storyboard */; };
+ 1EABD8F51FB430AB00959859 /* DebugTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EABD8F21FB430AA00959859 /* DebugTabViewController.swift */; };
+ 1EABD8F61FB430AB00959859 /* TestHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EABD8F31FB430AA00959859 /* TestHook.swift */; };
+ 1EB74FFC1FE5E1AF004B733E /* StateBookmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EB74FFB1FE5E1AF004B733E /* StateBookmarkView.swift */; };
+ 238E99F4E37C7365658113B8 /* Pods_SEDaily_IOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF0C9F051C6C2F8638D2ABF8 /* Pods_SEDaily_IOSTests.framework */; };
+ 24412438C753126FDDD37CBF /* Pods_SEDaily_IOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3651E5B02B83E392546E167 /* Pods_SEDaily_IOS.framework */; };
+<<<<<<< HEAD
+=======
+ 43CE140C225F7EF700B57CFA /* PlayProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE140B225F7EF700B57CFA /* PlayProgress.swift */; };
+ 43CE140E226070FB00B57CFA /* PlayProgressModelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE140D226070FB00B57CFA /* PlayProgressModelController.swift */; };
+>>>>>>> play_progress_refactor
+ 96004ACE20A9E0030017230F /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 96004ACD20A9E0030017230F /* GoogleService-Info.plist */; };
+ 960BFEBB202109800073DAB2 /* AskForReview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEBA202109800073DAB2 /* AskForReview.swift */; };
+ 960BFEBF20226B620073DAB2 /* CommentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEBE20226B620073DAB2 /* CommentsViewController.swift */; };
+ 960BFEC120226F1D0073DAB2 /* Comments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 960BFEC020226F1D0073DAB2 /* Comments.storyboard */; };
+ 960BFEC320239F0E0073DAB2 /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC220239F0E0073DAB2 /* Comment.swift */; };
+ 960BFEC52023C1330073DAB2 /* CommentsResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC42023C1330073DAB2 /* CommentsResponse.swift */; };
+ 960BFEC7202539180073DAB2 /* CommentReplyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC6202539180073DAB2 /* CommentReplyTableViewCell.swift */; };
+ 960BFEC9202539640073DAB2 /* CommentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960BFEC8202539640073DAB2 /* CommentTableViewCell.swift */; };
+ 9610313E20A353B400A2D2D5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9610313D20A353B400A2D2D5 /* AnalyticsHelper.swift */; };
+ 961A378D208FAFEF0050EF80 /* ForumThreadLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961A378C208FAFEF0050EF80 /* ForumThreadLite.swift */; };
+ 962F5365201E3C7900897A6E /* RelatedLinksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962F5364201E3C7900897A6E /* RelatedLinksViewController.swift */; };
+ 963144DE208FEA8000EA13F1 /* ForumThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963144DD208FEA8000EA13F1 /* ForumThread.swift */; };
+ 964090BF2093B97D00CFF5C4 /* PodcastLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964090BE2093B97D00CFF5C4 /* PodcastLite.swift */; };
+ 965798A52093FDE600104F8F /* FeedItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965798A42093FDE600104F8F /* FeedItemCell.swift */; };
+ 965E165820ABD74900F2E4E4 /* FeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965E165720ABD74900F2E4E4 /* FeedItem.swift */; };
+ 96600312201CEBBD00997795 /* RelatedLinks.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96600311201CEBBD00997795 /* RelatedLinks.storyboard */; };
+ 9662FC0A20AF21FA00CFA8DF /* BaseFeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9662FC0920AF21FA00CFA8DF /* BaseFeedItem.swift */; };
+ 9672AA52202929C90020981F /* Author.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9672AA51202929C90020981F /* Author.swift */; };
+ 96A7E2CF20951EBD002C92EC /* ThreadHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96A7E2CE20951EBD002C92EC /* ThreadHeaderView.swift */; };
+ 96B6168820C0883C00DF3CF6 /* ForumListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B6168620C0883C00DF3CF6 /* ForumListViewController.swift */; };
+ 96B6168B20C0A59500DF3CF6 /* ForumThreadCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B6168A20C0A59500DF3CF6 /* ForumThreadCell.swift */; };
+ 96BD1C88208E9497006C5E1D /* TestHookBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BD1C87208E9497006C5E1D /* TestHookBool.swift */; };
+ 96C8A9AB2091038100489EE4 /* FeedListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C8A9AA2091038100489EE4 /* FeedListViewController.swift */; };
+ 96C8A9AF209114C200489EE4 /* FeedList.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96C8A9AE209114C200489EE4 /* FeedList.storyboard */; };
+ 96D268F720B2250B002F95BD /* RelatedLinkWebVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D268F520B2250B002F95BD /* RelatedLinkWebVC.swift */; };
+ 96D268F820B2250B002F95BD /* RelatedLinkWebVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 96D268F620B2250B002F95BD /* RelatedLinkWebVC.xib */; };
+ 96F35745201BFB0200E8B6E9 /* RelatedLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F35744201BFB0200E8B6E9 /* RelatedLink.swift */; };
+ 96F4016F20C075E600D6A66A /* ForumList.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96F4016E20C075E600D6A66A /* ForumList.storyboard */; };
+ C0109D992013ECE0008BDA69 /* upvote_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C0109D982013ECE0008BDA69 /* upvote_success.json */; };
+ C0109D9B2013F064008BDA69 /* upvote_failure.json in Resources */ = {isa = PBXBuildFile; fileRef = C0109D9A2013F064008BDA69 /* upvote_failure.json */; };
+ C0109D9E2013F629008BDA69 /* LoginTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109D9D2013F629008BDA69 /* LoginTests.swift */; };
+ C0109DA02013F6A5008BDA69 /* RegisterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109D9F2013F6A5008BDA69 /* RegisterTests.swift */; };
+ C0109DA22013F6D8008BDA69 /* PostsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0109DA12013F6D8008BDA69 /* PostsTests.swift */; };
+ C015CB17201132DE00C6FD82 /* register_userexists.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB16201132DE00C6FD82 /* register_userexists.json */; };
+ C015CB192011373000C6FD82 /* register_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB182011373000C6FD82 /* register_success.json */; };
+ C015CB1B2011388C00C6FD82 /* register_emptyusernamepass.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB1A2011388C00C6FD82 /* register_emptyusernamepass.json */; };
+ C015CB1E20113CAB00C6FD82 /* getPostsWith_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C015CB1D20113CAB00C6FD82 /* getPostsWith_success.json */; };
+ C04C37FD200E94AE00C6EFC6 /* login_success.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C37FC200E94AE00C6EFC6 /* login_success.json */; };
+ C04C3800200EA6F400C6EFC6 /* login_wrongpass.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C37FF200EA6F400C6EFC6 /* login_wrongpass.json */; };
+ C04C3802200EA99200C6EFC6 /* login_nonexistinguser.json in Resources */ = {isa = PBXBuildFile; fileRef = C04C3801200EA99200C6EFC6 /* login_nonexistinguser.json */; };
+ C0590D78200AC2A500A00E4D /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0590D77200AC2A500A00E4D /* NetworkService.swift */; };
+ C0590D7A200AD36500A00E4D /* VotingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0590D79200AD36400A00E4D /* VotingTests.swift */; };
+ C05DA1D92013FA34003C631F /* getPosts_topPosts.json in Resources */ = {isa = PBXBuildFile; fileRef = C05DA1D82013FA34003C631F /* getPosts_topPosts.json */; };
+ C079B6541FCA07F800B4B304 /* HelpersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C079B6531FCA07F800B4B304 /* HelpersTests.swift */; };
+ C0E64BB41FCB3F9100753AF0 /* UserModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E64BB31FCB3F9100753AF0 /* UserModelTests.swift */; };
+ C0E64BB71FCB406000753AF0 /* UserDefaultsMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E64BB61FCB406000753AF0 /* UserDefaultsMock.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 1686FC121F009EC00088A6C1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 1686FBF51F009EC00088A6C1 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1686FBFC1F009EC00088A6C1;
+ remoteInfo = "SEDaily-IOS";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 01516A03207310C900E9E743 /* NotificationTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationTableViewCell.swift; sourceTree = ""; };
+ 01707420207192C0002E6E3C /* NotificationsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsTableViewController.swift; sourceTree = ""; };
+ 01BB1D6C1F29999E004A912E /* PodcastPageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastPageViewController.swift; sourceTree = ""; };
+ 161791FB1FC4DA7200A1287E /* OfflineDownloadsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OfflineDownloadsManager.swift; sourceTree = ""; };
+ 161F3DE51F61F73D00A8F825 /* SearchTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchTableViewController.swift; sourceTree = ""; };
+ 161F3DE91F62703100A8F825 /* PodcastTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastTableViewCell.swift; sourceTree = ""; };
+ 162FFD3F1FBE200E0026288D /* DiskKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskKeys.swift; sourceTree = ""; };
+ 16307FC91F8FDD02001783CB /* Podcast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Podcast.swift; sourceTree = ""; };
+ 16307FCB1F8FEE3A001783CB /* PodcastViewModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastViewModelController.swift; sourceTree = ""; };
+ 1649A7891F204EC6005C4A6E /* ContainerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainerViewController.swift; sourceTree = ""; };
+ 164C71041F021AC8003803BC /* CustomTabViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomTabViewController.swift; sourceTree = ""; };
+ 164FE9DB1F02DAB5009419CA /* PodcastCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PodcastCollectionViewCell.swift; sourceTree = ""; };
+ 164FE9E01F02EE67009419CA /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; };
+ 164FE9E41F02EE83009419CA /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = ""; };
+ 164FE9E61F02F02F009419CA /* UserModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserModel.swift; sourceTree = ""; };
+ 164FE9E81F02F049009419CA /* Stylesheet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stylesheet.swift; sourceTree = ""; };
+ 164FE9EA1F02F340009419CA /* Helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; };
+ 164FE9EC1F02F7E2009419CA /* UIButtonExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIButtonExtension.swift; sourceTree = ""; };
+ 164FE9EE1F03065C009419CA /* NavigationControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationControllerExtension.swift; sourceTree = ""; };
+ 165484541F902D3F005AEA23 /* GeneralCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralCollectionViewController.swift; sourceTree = ""; };
+ 166036201F266FF300A22B7B /* Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = ""; };
+ 1671BD55200D278F00E6ED3B /* PurchaseSubscriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseSubscriptionViewController.swift; sourceTree = ""; };
+ 1671BD57200D361900E6ED3B /* SubscriptionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionModel.swift; sourceTree = ""; };
+ 1671BD59200D3D7800E6ED3B /* SubscriptionStatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionStatusViewController.swift; sourceTree = ""; };
+ 167AFAB61F043F1100A1332F /* HeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; };
+ 1686FBFD1F009EC00088A6C1 /* SEDaily-IOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SEDaily-IOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1686FC001F009EC00088A6C1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 1686FC051F009EC00088A6C1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 1686FC071F009EC00088A6C1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 1686FC0A1F009EC00088A6C1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 1686FC0C1F009EC00088A6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 1686FC111F009EC00088A6C1 /* SEDaily-IOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SEDaily-IOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1686FC151F009EC00088A6C1 /* SEDailyIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SEDailyIOSTests.swift; sourceTree = ""; };
+ 1686FC171F009EC00088A6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 1688CB4B2006BDDA00440095 /* APIStripeExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIStripeExtension.swift; sourceTree = ""; };
+ 169806A51F8EF08F0075D8AD /* L10nEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L10nEnum.swift; sourceTree = ""; };
+ 16AD3E091F9B138D0084C545 /* PodcastViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastViewModel.swift; sourceTree = ""; };
+ 16AD3E0B1F9B13EE0084C545 /* FilterObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterObject.swift; sourceTree = ""; };
+ 16AD3E0D1F9B14130084C545 /* PodcastDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastDataSource.swift; sourceTree = ""; };
+ 16B147B01F16BF9C00433A42 /* AudioOverlayViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioOverlayViewController.swift; sourceTree = ""; };
+ 16CE698E1F98029E0057BAC3 /* PodcastDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastDetailViewController.swift; sourceTree = ""; };
+ 16D67C491F33AC620065E838 /* AnswersTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnswersTracker.swift; sourceTree = ""; };
+ 16D766B91F06B4850066C143 /* AudioView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioView.swift; sourceTree = ""; };
+ 16F3A1B91F90918D00364709 /* PodcastRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastRepository.swift; sourceTree = ""; };
+ 16FA84021F8D323700A45D9B /* SkeletonCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonCollectionView.swift; sourceTree = ""; };
+ 1E286DE21FE4C5BA00644C1D /* TestHookEventTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookEventTableViewCell.swift; sourceTree = ""; };
+ 1E286DE41FE4C63200644C1D /* TestHookManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookManager.swift; sourceTree = ""; };
+ 1E286DE81FE4C65200644C1D /* TestHookEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHookEvent.swift; sourceTree = ""; };
+ 1E2BFDCC2017C74A00E6DE0A /* TestHookBoolTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHookBoolTableViewCell.swift; sourceTree = ""; };
+ 1E44AEFF1F87ACF500221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/LaunchScreen.strings; sourceTree = ""; };
+ 1E44AF001F87ACF500221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; };
+ 1E44AF061F87B09100221B22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; };
+ 1E44AF081F87B0A700221B22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; };
+ 1E638E551FC794AC00A29BDC /* ProgressIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressIndicator.swift; sourceTree = ""; };
+ 1E706BD11FD620B100D44AB2 /* BookmarkCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BookmarkCollectionViewController.swift; path = Bookmark/BookmarkCollectionViewController.swift; sourceTree = ""; };
+ 1E706BD31FD62E0300D44AB2 /* BookmarkViewModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = BookmarkViewModelController.swift; path = Bookmark/BookmarkViewModelController.swift; sourceTree = ""; };
+ 1EABD8F11FB430AA00959859 /* Debug.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Debug.storyboard; sourceTree = ""; };
+ 1EABD8F21FB430AA00959859 /* DebugTabViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugTabViewController.swift; sourceTree = ""; };
+ 1EABD8F31FB430AA00959859 /* TestHook.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestHook.swift; sourceTree = ""; };
+ 1EB74FFB1FE5E1AF004B733E /* StateBookmarkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = StateBookmarkView.swift; path = Bookmark/StateBookmarkView.swift; sourceTree = ""; };
+<<<<<<< HEAD
+=======
+ 43CE140B225F7EF700B57CFA /* PlayProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayProgress.swift; sourceTree = ""; };
+ 43CE140D226070FB00B57CFA /* PlayProgressModelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayProgressModelController.swift; sourceTree = ""; };
+>>>>>>> play_progress_refactor
+ 675FBEB71FD81FBA8767227A /* Pods-SEDaily-IOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SEDaily-IOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-SEDaily-IOS/Pods-SEDaily-IOS.release.xcconfig"; sourceTree = ""; };
+ 96004ACD20A9E0030017230F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
+ 960BFEBA202109800073DAB2 /* AskForReview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AskForReview.swift; sourceTree = ""; };
+ 960BFEBE20226B620073DAB2 /* CommentsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsViewController.swift; sourceTree = ""; };
+ 960BFEC020226F1D0073DAB2 /* Comments.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Comments.storyboard; sourceTree = ""; };
+ 960BFEC220239F0E0073DAB2 /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; };
+ 960BFEC42023C1330073DAB2 /* CommentsResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsResponse.swift; sourceTree = ""; };
+ 960BFEC6202539180073DAB2 /* CommentReplyTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentReplyTableViewCell.swift; sourceTree = ""; };
+ 960BFEC8202539640073DAB2 /* CommentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentTableViewCell.swift; sourceTree = ""; };
+ 9610313D20A353B400A2D2D5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; };
+ 961A378C208FAFEF0050EF80 /* ForumThreadLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForumThreadLite.swift; sourceTree = ""; };
+ 962F5364201E3C7900897A6E /* RelatedLinksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelatedLinksViewController.swift; sourceTree = ""; };
+ 963144DD208FEA8000EA13F1 /* ForumThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForumThread.swift; sourceTree = ""; };
+ 964090BE2093B97D00CFF5C4 /* PodcastLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PodcastLite.swift; sourceTree = ""; };
+ 965798A42093FDE600104F8F /* FeedItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedItemCell.swift; sourceTree = "