Added local pods as source code.

This commit is contained in:
Vadim Bulavin 2017-10-24 17:09:50 +03:00
Родитель 1d4ed3cee6
Коммит 11e2b8a12a
136 изменённых файлов: 2411 добавлений и 865 удалений

1
.swift-version Normal file
Просмотреть файл

@ -0,0 +1 @@
3.2

Просмотреть файл

@ -4,42 +4,32 @@
//
import UIKit
import EmbeddedSocial
//import EmbeddedSocial
import UserNotifications
import HockeySDK
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let menu = MyAppMenu()
// let menu = MyAppMenu()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// HockeyApp configuration to enable analytics
BITHockeyManager.shared().configure(withIdentifier: "46cc5ba83a8043b9a4b67cc0f9c6c9a2")
BITHockeyManager.shared().start()
BITHockeyManager.shared().authenticator.authenticateInstallation()
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = UIViewController()
window?.makeKeyAndVisible()
if TARGET_OS_SIMULATOR != 0 {
BITHockeyManager.shared().isUpdateManagerDisabled = true
}
if (ProcessInfo.processInfo.environment["EmbeddedSocial_MOCK_SERVER"] != nil) {
UIView.setAnimationsEnabled(false)
}
let args = LaunchArguments(app: application,
window: window!,
launchOptions: launchOptions ?? [:],
menuHandler: menu,
menuConfiguration: .tab)
SocialPlus.shared.start(launchArguments: args)
// let args = LaunchArguments(app: application,
// window: window!,
// launchOptions: launchOptions ?? [:],
// menuHandler: menu,
// menuConfiguration: .tab)
// SocialPlus.shared.start(launchArguments: args)
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
@ -55,20 +45,20 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {
return SocialPlus.shared.application(app, open: url, options: options)
}
/// iOS 8 support
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
var options: [String: Any] = ["UIApplicationOpenURLOptionsAnnotationKey": annotation]
if let sourceApplication = sourceApplication {
options["UIApplicationOpenURLOptionsSourceApplicationKey"] = sourceApplication
}
return SocialPlus.shared.application(application, open: url as URL, options: options)
}
// func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any] = [:]) -> Bool {
// return SocialPlus.shared.application(app, open: url, options: options)
// }
//
// /// iOS 8 support
// func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// var options: [String: Any] = ["UIApplicationOpenURLOptionsAnnotationKey": annotation]
//
// if let sourceApplication = sourceApplication {
// options["UIApplicationOpenURLOptionsSourceApplicationKey"] = sourceApplication
// }
//
// return SocialPlus.shared.application(application, open: url as URL, options: options)
// }
/// push notifications
@ -77,7 +67,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print(deviceTokenString)
SocialPlus.shared.updateDeviceToken(devictToken: deviceTokenString)
// SocialPlus.shared.updateDeviceToken(devictToken: deviceTokenString)
}
@ -89,7 +79,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]) {
// Print notification payload data
print("Push notification received: \(data)")
SocialPlus.shared.didReceiveRemoteNotification(data: data)
// SocialPlus.shared.didReceiveRemoteNotification(data: data)
}

Просмотреть файл

@ -3,7 +3,8 @@
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
/*import Foundation
import UIKit
import EmbeddedSocial
class MyAppMenu: SideMenuItemsProvider {
@ -56,5 +57,5 @@ class MyAppMenu: SideMenuItemsProvider {
return false
}
}
}*/

Просмотреть файл

@ -0,0 +1,55 @@
Pod::Spec.new do |s|
s.platform = :ios
s.ios.deployment_target = '9.0'
s.name = 'EmbeddedSocial'
s.version = '0.7.4'
s.summary = 'SDK for interacting with the Microsoft Embedded Social service from inside your iOS app.'
s.requires_arc = true
s.description = <<-DESC
This is an SDK that works with the Microsoft Embedded Social service to provide social networking functionality inside your iOS application.
DESC
s.homepage = 'https://github.com/Microsoft/EmbeddedSocial-iOS-SDK'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Microsoft' => 'opencode@microsoft.com' }
s.source = {
:git => 'https://github.com/Microsoft/EmbeddedSocial-iOS-SDK.git',
:tag => s.version.to_s,
:submodules => true
}
s.source_files = 'EmbeddedSocial/Sources/**/*.swift'
s.resource_bundles = {
'EmbeddedSocialResources' => ['EmbeddedSocial/Resources/*.{xcassets,plist}'],
'EmbeddedSocialStoryboards' => ['EmbeddedSocial/Sources/**/*.storyboard'],
'EmbeddedSocialThemes' => ['EmbeddedSocial/Sources/**/*.plist']
}
# ――― Dependencies ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
s.dependency 'Alamofire', '~> 4.5.0'
s.dependency 'SwiftLint', '~> 0.20.1'
s.dependency 'SnapKit', '~> 3.2.0'
s.dependency 'SlideMenuControllerSwift', '~> 3.0'
s.dependency 'TwitterKit', '~> 2.8.0'
s.dependency 'GoogleSignIn', '~> 4.0.2'
s.dependency 'SDWebImage', '~> 4.0.0'
s.dependency 'SwiftGen', '~> 4.2.1'
s.dependency 'Sourcery', '~> 0.7.2'
s.dependency 'UITextView+Placeholder', '~> 1.2.0'
#s.dependency 'OAuthSwift-Local'
#s.dependency 'EmbeddedSocial/Vendor/OAuthSwift'
#s.dependency 'OAuthSwift', :local => 'EmbeddedSocial/Vendor/OAuthSwift'
# s.dependency 'LiveSDK', :local => 'EmbeddedSocial/Vendor/LiveSDK'
s.dependency 'SKPhotoBrowser', '~> 4.0.1'
s.dependency 'MBProgressHUD', '~> 1.0'
s.dependency 'TTTAttributedLabel', '~> 2.0'
s.dependency 'HockeySDK/AllFeaturesLib', '~> 5.0.0'
s.dependency 'FBSDKCoreKit', '~> 4.24.0'
s.dependency 'FBSDKLoginKit', '~> 4.24.0'
s.dependency 'FBSDKShareKit', '~> 4.24.0'
s.subspec 'OAuthSwift-Local' do |ss|
ss.source_files = 'EmbeddedSocial/Vendor/OAuthSwift/Sources/*.swift'
end
end

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -5,6 +5,7 @@
import Foundation
import SnapKit
import FBSDKLoginKit
public final class SocialPlus {
public static let shared = SocialPlus()
@ -83,6 +84,15 @@ public final class SocialPlus {
let c = UpdateNotificationsStatusCommand(handle: UUID().uuidString)
cache.cacheOutgoing(c)
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
let mgr = FBSDKLoginManager()
mgr.logIn(withReadPermissions: ["user_about_me"], from: self.coordinator.navigationStack.navigationController) { p1, p2 in
withExtendedLifetime(mgr) {
print(p1, p2)
}
}
}
}
fileprivate func startSession(with info: SessionInfo) {

Просмотреть файл

@ -1,158 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="17A365" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Linked Accounts View Controller-->
<scene sceneID="uhf-g2-Fmi">
<objects>
<tableViewController storyboardIdentifier="LinkedAccountsViewController" id="xCa-sh-OsW" customClass="LinkedAccountsViewController" customModule="EmbeddedSocial" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="6EZ-Xt-iEg">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<sections>
<tableViewSection id="roV-uR-CGz">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="3XD-HW-gvI">
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3XD-HW-gvI" id="eX9-qt-Maq">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="gEH-Ew-hPh">
<rect key="frame" x="318" y="6" width="51" height="31"/>
<connections>
<action selector="onFacebookSwitch:" destination="xCa-sh-OsW" eventType="valueChanged" id="zcB-e7-uQQ"/>
</connections>
</switch>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sign in with Facebook" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5xC-9B-HEf">
<rect key="frame" x="16" y="13" width="286" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="gEH-Ew-hPh" firstAttribute="leading" secondItem="5xC-9B-HEf" secondAttribute="trailing" constant="16" id="0On-wv-LSV"/>
<constraint firstItem="gEH-Ew-hPh" firstAttribute="centerY" secondItem="eX9-qt-Maq" secondAttribute="centerY" id="2Ux-Hw-on4"/>
<constraint firstItem="5xC-9B-HEf" firstAttribute="centerY" secondItem="eX9-qt-Maq" secondAttribute="centerY" id="EwJ-dM-KYv"/>
<constraint firstItem="5xC-9B-HEf" firstAttribute="leading" secondItem="eX9-qt-Maq" secondAttribute="leading" constant="16" id="XQ3-eK-g5Q"/>
<constraint firstAttribute="trailing" secondItem="gEH-Ew-hPh" secondAttribute="trailing" constant="8" id="dGA-5a-rGu"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="ukO-Ts-TQ9">
<rect key="frame" x="0.0" y="44" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ukO-Ts-TQ9" id="AS8-bi-a3A">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="1xw-uv-s3b">
<rect key="frame" x="318" y="6" width="51" height="31"/>
<connections>
<action selector="onGoogleSwitch:" destination="xCa-sh-OsW" eventType="valueChanged" id="iVV-Nn-eMY"/>
</connections>
</switch>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sign in with Google" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lYC-4n-irY">
<rect key="frame" x="16" y="13" width="286" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="1xw-uv-s3b" secondAttribute="trailing" constant="8" id="0qJ-sb-DoQ"/>
<constraint firstItem="1xw-uv-s3b" firstAttribute="centerY" secondItem="AS8-bi-a3A" secondAttribute="centerY" id="AvN-Jh-CbH"/>
<constraint firstItem="lYC-4n-irY" firstAttribute="centerY" secondItem="AS8-bi-a3A" secondAttribute="centerY" id="NvB-jv-wcm"/>
<constraint firstItem="1xw-uv-s3b" firstAttribute="leading" secondItem="lYC-4n-irY" secondAttribute="trailing" constant="16" id="YJp-Ka-D7j"/>
<constraint firstItem="lYC-4n-irY" firstAttribute="leading" secondItem="AS8-bi-a3A" secondAttribute="leading" constant="16" id="zw8-jU-eOl"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="XAs-Mv-fsu">
<rect key="frame" x="0.0" y="88" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="XAs-Mv-fsu" id="ml2-J1-nDU">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="0Ak-Ke-Wlv">
<rect key="frame" x="318" y="6" width="51" height="31"/>
<connections>
<action selector="onMicrosoftSwitch:" destination="xCa-sh-OsW" eventType="valueChanged" id="dcu-ob-Bfu"/>
</connections>
</switch>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sign in with Microsoft" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="H5b-ew-gwh">
<rect key="frame" x="16" y="13" width="286" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="0Ak-Ke-Wlv" secondAttribute="trailing" constant="8" id="4hG-pb-ru5"/>
<constraint firstItem="0Ak-Ke-Wlv" firstAttribute="leading" secondItem="H5b-ew-gwh" secondAttribute="trailing" constant="16" id="5bS-pv-hbg"/>
<constraint firstItem="H5b-ew-gwh" firstAttribute="centerY" secondItem="ml2-J1-nDU" secondAttribute="centerY" id="Ckc-a6-AMH"/>
<constraint firstItem="0Ak-Ke-Wlv" firstAttribute="centerY" secondItem="ml2-J1-nDU" secondAttribute="centerY" id="YAL-9y-gl0"/>
<constraint firstItem="H5b-ew-gwh" firstAttribute="leading" secondItem="ml2-J1-nDU" secondAttribute="leading" constant="16" id="mTZ-gu-DkF"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="ft3-kN-Z7Q">
<rect key="frame" x="0.0" y="132" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ft3-kN-Z7Q" id="g4F-5B-wgB">
<rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="xhG-fe-wIN">
<rect key="frame" x="318" y="6" width="51" height="31"/>
<connections>
<action selector="onTwitterSwitch:" destination="xCa-sh-OsW" eventType="valueChanged" id="Piq-By-Fb6"/>
</connections>
</switch>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sign in with Twitter" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QBS-pv-6R0">
<rect key="frame" x="16" y="13" width="286" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="QBS-pv-6R0" firstAttribute="leading" secondItem="g4F-5B-wgB" secondAttribute="leading" constant="16" id="8jI-tr-i7V"/>
<constraint firstAttribute="trailing" secondItem="xhG-fe-wIN" secondAttribute="trailing" constant="8" id="GOH-PE-vR0"/>
<constraint firstItem="xhG-fe-wIN" firstAttribute="leading" secondItem="QBS-pv-6R0" secondAttribute="trailing" constant="16" id="Jdr-cs-I6Z"/>
<constraint firstItem="xhG-fe-wIN" firstAttribute="centerY" secondItem="g4F-5B-wgB" secondAttribute="centerY" id="XAk-Pn-ygM"/>
<constraint firstItem="QBS-pv-6R0" firstAttribute="centerY" secondItem="g4F-5B-wgB" secondAttribute="centerY" id="c0K-cX-Rkj"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="xCa-sh-OsW" id="TCX-TN-0jL"/>
<outlet property="delegate" destination="xCa-sh-OsW" id="e5v-TT-1YZ"/>
</connections>
</tableView>
<connections>
<outlet property="facebookSwitch" destination="gEH-Ew-hPh" id="NZz-hL-5TX"/>
<outlet property="googleSwitch" destination="1xw-uv-s3b" id="2Y0-Io-jlc"/>
<outlet property="microsoftSwitch" destination="0Ak-Ke-Wlv" id="Zxn-Zx-oOV"/>
<outlet property="twitterSwitch" destination="xhG-fe-wIN" id="IQy-51-AUl"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="r1G-jd-wHf" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="381.60000000000002" y="-687.7061469265368"/>
</scene>
</scenes>
</document>

Просмотреть файл

@ -1,27 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
struct LinkedAccountsConfigurator {
let viewController: LinkedAccountsViewController
init() {
viewController = StoryboardScene.LinkedAccounts.linkedAccountsViewController.instantiate()
}
func configure(sessionToken: String) {
let presenter = LinkedAccountsPresenter()
let usersService = UserService(imagesService: ImagesService())
let authService = AuthService(apiProvider: AuthAPIProvider())
presenter.interactor = LinkedAccountsInteractor(usersService: usersService,
authService: authService,
sessionToken: sessionToken)
presenter.view = viewController
viewController.output = presenter
}
}

Просмотреть файл

@ -1,36 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
final class LinkedAccountsInteractor: LinkedAccountsInteractorInput {
private let usersService: UserServiceType
private let authService: AuthService
private let sessionToken: String
init(usersService: UserServiceType, authService: AuthService, sessionToken: String) {
self.usersService = usersService
self.authService = authService
self.sessionToken = sessionToken
}
func getLinkedAccounts(completion: @escaping (Result<[LinkedAccountView]>) -> Void) {
usersService.getLinkedAccounts(completion: completion)
}
func login(with provider: AuthProvider,
from viewController: UIViewController?,
completion: @escaping (Result<Authorization>) -> Void) {
authService.login(with: provider, from: viewController) { result in
completion(result.map { $0.credentials.authorization })
}
}
func linkAccount(authorization: Authorization, completion: @escaping (Result<Void>) -> Void) {
usersService.linkAccount(authorization: authorization, sessionToken: sessionToken, completion: completion)
}
}

Просмотреть файл

@ -1,16 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
protocol LinkedAccountsInteractorInput: class {
func getLinkedAccounts(completion: @escaping (Result<[LinkedAccountView]>) -> Void)
func login(with provider: AuthProvider,
from viewController: UIViewController?,
completion: @escaping (Result<Authorization>) -> Void)
func linkAccount(authorization: Authorization, completion: @escaping (Result<Void>) -> Void)
}

Просмотреть файл

@ -1,92 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
final class LinkedAccountsPresenter {
weak var view: LinkedAccountsViewInput!
var interactor: LinkedAccountsInteractorInput!
}
extension LinkedAccountsPresenter: LinkedAccountsViewOutput {
func viewIsReady() {
view.setupInitialState()
loadLinkedAccounts()
}
func loadLinkedAccounts() {
view.setSwitchesEnabled(false)
interactor.getLinkedAccounts { [weak self] accounts in
self?.view.setSwitchesEnabled(true)
if let accounts = accounts.value {
for account in accounts {
self?.setLinkedAccount(account)
}
} else {
self?.view.showError(accounts.error ?? APIError.unknown)
}
}
}
private func setLinkedAccount(_ linkedAccount: LinkedAccountView) {
if let authProvider = linkedAccount.identityProvider?.authProvider {
view.setSwitchOn(true, for: authProvider)
}
}
func onFacebookSwitchValueChanged(_ isOn: Bool) {
processSwitchValueChanged(isOn, provider: .facebook)
}
func onGoogleSwitchValueChanged(_ isOn: Bool) {
processSwitchValueChanged(isOn, provider: .google)
}
func onMicrosoftSwitchValueChanged(_ isOn: Bool) {
processSwitchValueChanged(isOn, provider: .microsoft)
}
func onTwitterSwitchValueChanged(_ isOn: Bool) {
processSwitchValueChanged(isOn, provider: .twitter)
}
private func processSwitchValueChanged(_ isOn: Bool, provider: AuthProvider) {
if isOn {
login(with: provider)
} else {
// delete linked account
}
}
private func login(with provider: AuthProvider) {
view.setSwitchesEnabled(false)
interactor.login(with: provider, from: view as? UIViewController) { [weak self] result in
guard let authorization = result.value else {
self?.view.showError(result.error ?? APIError.unknown)
return
}
self?.interactor.linkAccount(authorization: authorization) { result in
self?.view.setSwitchesEnabled(true)
if let error = result.error {
self?.view.setSwitchOn(false, for: provider)
self?.view.showError(error)
}
}
}
}
}

Просмотреть файл

@ -1,79 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import UIKit
class LinkedAccountsViewController: UITableViewController {
var output: LinkedAccountsViewOutput!
@IBOutlet fileprivate weak var facebookSwitch: UISwitch!
@IBOutlet fileprivate weak var googleSwitch: UISwitch!
@IBOutlet fileprivate weak var microsoftSwitch: UISwitch!
@IBOutlet fileprivate weak var twitterSwitch: UISwitch!
fileprivate var switches: [UISwitch] {
return [facebookSwitch, googleSwitch, microsoftSwitch, twitterSwitch]
}
override func viewDidLoad() {
super.viewDidLoad()
output.viewIsReady()
}
@IBAction func onFacebookSwitch(_ sender: UISwitch) {
output.onFacebookSwitchValueChanged(sender.isOn)
}
@IBAction func onGoogleSwitch(_ sender: UISwitch) {
output.onGoogleSwitchValueChanged(sender.isOn)
}
@IBAction func onMicrosoftSwitch(_ sender: UISwitch) {
output.onMicrosoftSwitchValueChanged(sender.isOn)
}
@IBAction func onTwitterSwitch(_ sender: UISwitch) {
output.onTwitterSwitchValueChanged(sender.isOn)
}
}
extension LinkedAccountsViewController: LinkedAccountsViewInput {
func setupInitialState() {
tableView.tableFooterView = UIView()
}
func setSwitchOn(_ isOn: Bool, for provider: AuthProvider) {
switcher(for: provider)?.setOn(isOn, animated: true)
}
func setSwitchEnabled(_ isEnabled: Bool, for provider: AuthProvider) {
switcher(for: .google)?.isEnabled = isEnabled
}
func showError(_ error: Error) {
showErrorAlert(error)
}
func setSwitchesEnabled(_ isEnabled: Bool) {
for sw in switches {
sw.isEnabled = isEnabled
}
}
private func switcher(for provider: AuthProvider) -> UISwitch? {
switch provider {
case .facebook:
return facebookSwitch
case .google:
return googleSwitch
case .microsoft:
return microsoftSwitch
case .twitter:
return twitterSwitch
}
}
}

Просмотреть файл

@ -1,18 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
protocol LinkedAccountsViewInput: class {
func setupInitialState()
func setSwitchOn(_ isOn: Bool, for provider: AuthProvider)
func setSwitchEnabled(_ isEnabled: Bool, for provider: AuthProvider)
func showError(_ error: Error)
func setSwitchesEnabled(_ isEnabled: Bool)
}

Просмотреть файл

@ -1,18 +0,0 @@
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
//
import Foundation
protocol LinkedAccountsViewOutput: class {
func viewIsReady()
func onFacebookSwitchValueChanged(_ isOn: Bool)
func onGoogleSwitchValueChanged(_ isOn: Bool)
func onMicrosoftSwitchValueChanged(_ isOn: Bool)
func onTwitterSwitchValueChanged(_ isOn: Bool)
}

Просмотреть файл

@ -7,6 +7,7 @@ import Foundation
import FBSDKCoreKit
import TwitterKit
import GoogleSignIn
import HockeySDK
protocol ThirdPartyConfiguratorType {
func setup(application: UIApplication, launchOptions: [AnyHashable: Any])
@ -32,6 +33,16 @@ struct ThirdPartyConfigurator: ThirdPartyConfiguratorType {
private func setupGoogle() {
GIDSignIn.sharedInstance().clientID = "348861152334-5hdrnh6qal3trt8m2ukv26due7fn20k0.apps.googleusercontent.com"
}
private func setupHockeyApp() {
BITHockeyManager.shared().configure(withIdentifier: "46cc5ba83a8043b9a4b67cc0f9c6c9a2")
BITHockeyManager.shared().start()
BITHockeyManager.shared().authenticator.authenticateInstallation()
if TARGET_OS_SIMULATOR != 0 {
BITHockeyManager.shared().isUpdateManagerDisabled = true
}
}
}
extension ThirdPartyConfigurator {

Просмотреть файл

@ -0,0 +1,53 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Просмотреть файл

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

6
Resources_bundle/Images.xcassets/External/Contents.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_designObserver@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_designObserver.imageset/icon_designObserver@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 19 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_fb@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_fb.imageset/icon_fb@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 651 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_freshPaint@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_freshPaint.imageset/icon_freshPaint@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 19 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_gplus@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_gplus.imageset/icon_gplus@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_msft@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_msft.imageset/icon_msft@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 405 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_socialPlus_v2@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_socialPlus_v2.imageset/icon_socialPlus_v2@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_twitter@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/External/icon_twitter.imageset/icon_twitter@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Просмотреть файл

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "placeholder_post_image.jpg",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 196 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "test.jpg",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/Placeholders/placeholder_post_image2.imageset/test.jpg поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "placeholder_user_1.jpg",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/Placeholders/placeholder_post_user_1.imageset/placeholder_user_1.jpg поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 9.3 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "es_accept.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/es_accept.imageset/es_accept.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.3 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_decor_comment.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/es_decor_comment.imageset/es_decor_comment.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.1 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_decor_follow.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/es_decor_follow.imageset/es_decor_follow.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.2 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_decor_like.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/es_decor_like.imageset/es_decor_like.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.0 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_reject.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/es_reject.imageset/es_reject.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 731 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_accept@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_accept.imageset/icon_accept@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_activity@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_activity.imageset/icon_activity@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 584 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_navigation_activity_highlight.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_activity_active.imageset/es_navigation_activity_highlight.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 610 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_activity_commented@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_activity_commented.imageset/icon_activity_commented@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 941 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_activity_followed@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_activity_followed.imageset/icon_activity_followed@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_activity_liked@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_activity_liked.imageset/icon_activity_liked@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 943 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_arrow_green@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_arrow_green.imageset/icon_arrow_green@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 365 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "icon_back@2x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_back.imageset/icon_back@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_checkmark_blue@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_checkmark_blue.imageset/icon_checkmark_blue@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 403 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_ic_comment.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_comment.imageset/es_ic_comment.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "es_ic_comment_green.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_comment_active.imageset/es_ic_comment_green.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 585 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_disclosure@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_disclosure.imageset/icon_disclosure@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 289 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_dots@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_dots.imageset/icon_dots@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_edit@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_edit.imageset/icon_edit@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_gallery@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_gallery.imageset/icon_gallery@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 229 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_gear@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_gear.imageset/icon_gear@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_hamburger@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_hamburger.imageset/icon_hamburger@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 235 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_home@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_home.imageset/icon_home@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 375 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_navigation_home_highlight.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_home_active.imageset/es_navigation_home_highlight.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 593 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_ic_like_normal.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_liked.imageset/es_ic_like_normal.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "es_ic_like_green.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_liked_active.imageset/es_ic_like_green.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 579 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_list@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_list.imageset/icon_list@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 310 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_logout@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_logout.imageset/icon_logout@2x.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 412 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_ic_pin_normal.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_pin.imageset/es_ic_pin_normal.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "es_navigation_pins_highlight.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Двоичные данные
Resources_bundle/Images.xcassets/icon_pin_active.imageset/es_navigation_pins_highlight.png поставляемый Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 945 B

Просмотреть файл

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "icon_pins@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше