Refactor PasswordSetupUI, PassportUI, GalleryUI and related modules

This commit is contained in:
Peter 2019-08-12 19:18:43 +03:00
parent aa366dee27
commit a49f04203e
311 changed files with 11406 additions and 1899 deletions

View file

@ -38,10 +38,19 @@
location = "group:submodules/SaveToCameraRoll/SaveToCameraRoll_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/TelegramNotices/TelegramNotices_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TelegramNotices/TelegramNotices_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/TelegramPermissions/TelegramPermissions_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TelegramPermissions/TelegramPermissions_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/WebsiteType/WebsiteType_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ScreenCaptureDetection/ScreenCaptureDetection_Xcode.xcodeproj">
</FileRef>
<Group
location = "container:"
@ -50,10 +59,13 @@
location = "group:submodules/ImageBlur/ImageBlur_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/TinyThumbnail/TinyThumbnail_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TinyThumbnail/TinyThumbnail_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ImageTransparency/ImageTransparency_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ImageTransparency/ImageTransparency_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ImageCompression/ImageCompression_Xcode.xcodeproj">
</FileRef>
</Group>
</Group>
@ -96,7 +108,7 @@
location = "group:submodules/MediaResources/MediaResources_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/PhotoResources/PhotoResources_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/PhotoResources/PhotoResources_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/StickerResources/StickerResources_Xcode.xcodeproj">
@ -119,17 +131,52 @@
<Group
location = "container:"
name = "UI Components">
<Group
location = "container:"
name = "Video Content">
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent_Xcode.xcodeproj">
</FileRef>
</Group>
<Group
location = "container:"
name = "Nodes">
<FileRef
location = "group:submodules/RadialStatusNode/RadialStatusNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/LiveLocationTimerNode/LiveLocationTimerNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/CheckNode/CheckNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/SwitchNode/SwitchNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ActivityIndicator/ActivityIndicator_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/PhoneInputNode/PhoneInputNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/SearchBarNode/SearchBarNode_Xcode.xcodeproj">
</FileRef>
</Group>
<Group
location = "container:"
name = "Gestures">
<FileRef
location = "group:submodules/TouchDownGesture/TouchDownGesture_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TouchDownGesture/TouchDownGesture_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/SwipeToDismissGesture/SwipeToDismissGesture_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/SwipeToDismissGesture/SwipeToDismissGesture_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/DirectionalPanGesture/DirectionalPanGesture_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/DirectionalPanGesture/DirectionalPanGesture_Xcode.xcodeproj">
</FileRef>
</Group>
<Group
@ -142,6 +189,9 @@
<Group
location = "container:"
name = "Action Sheet">
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/DateSelectionUI/DateSelectionUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ActionSheetPeerItem/ActionSheetPeerItem_Xcode.xcodeproj">
</FileRef>
@ -176,16 +226,13 @@
</FileRef>
</Group>
<FileRef
location = "group:submodules/AlertUI/AlertUI_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/LegacyUI/LegacyUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/RadialStatusNode/RadialStatusNode_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/LiveLocationTimerNode/LiveLocationTimerNode_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/AlertUI/AlertUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/OverlayStatusController/OverlayStatusController_Xcode.xcodeproj">
@ -208,21 +255,9 @@
<FileRef
location = "group:submodules/RMIntro/RMIntro_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/CheckNode/CheckNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/SwitchNode/SwitchNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/AnimationUI/AnimationUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ActivityIndicator/ActivityIndicator_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ProgressNavigationButtonNode/ProgressNavigationButtonNode_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/AsyncDisplayKit/AsyncDisplayKit_Xcode.xcodeproj">
</FileRef>
@ -239,10 +274,28 @@
location = "group:submodules/ContextUI/ContextUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/ComposePollUI/ComposePollUI_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ComposePollUI/ComposePollUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:submodules/UndoUI/UndoUI_Xcode.xcodeproj">
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/UndoUI/UndoUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/GameUI/GameUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/WebUI/WebUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/PassportUI/PassportUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/CountrySelectionUI/CountrySelectionUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/GalleryUI/GalleryUI_Xcode.xcodeproj">
</FileRef>
<FileRef
location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/PasswordSetupUI/PasswordSetupUI_Xcode.xcodeproj">
</FileRef>
</Group>
<FileRef

View file

@ -33,6 +33,8 @@
D0879B7122F8425B00C4D6B3 /* WallpaperUploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879B7022F8425B00C4D6B3 /* WallpaperUploadManager.swift */; };
D0879B7322F842FF00C4D6B3 /* WatchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879B7222F842FF00C4D6B3 /* WatchManager.swift */; };
D0C9C12322FE414700FAB518 /* PresentationSurfaceLevels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C12222FE414700FAB518 /* PresentationSurfaceLevels.swift */; };
D0C9C3D72300CC2500FAB518 /* FetchMediaUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */; };
D0C9C3D92300CC6000FAB518 /* IsMediaStreamable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */; };
D0D3285422F329A900D07EE2 /* AccountContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D3285222F329A900D07EE2 /* AccountContext.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0D3285F22F335B000D07EE2 /* AccountContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D3285E22F335B000D07EE2 /* AccountContext.swift */; };
D0D3289D22F3461700D07EE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D3289C22F3461700D07EE2 /* Foundation.framework */; };
@ -69,6 +71,8 @@
D0879B7022F8425B00C4D6B3 /* WallpaperUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperUploadManager.swift; sourceTree = "<group>"; };
D0879B7222F842FF00C4D6B3 /* WatchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchManager.swift; sourceTree = "<group>"; };
D0C9C12222FE414700FAB518 /* PresentationSurfaceLevels.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PresentationSurfaceLevels.swift; sourceTree = "<group>"; };
D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchMediaUtils.swift; sourceTree = "<group>"; };
D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IsMediaStreamable.swift; sourceTree = "<group>"; };
D0D3284F22F329A900D07EE2 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0D3285222F329A900D07EE2 /* AccountContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccountContext.h; sourceTree = "<group>"; };
D0D3285322F329A900D07EE2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -143,6 +147,8 @@
D0879B7022F8425B00C4D6B3 /* WallpaperUploadManager.swift */,
D0879B7222F842FF00C4D6B3 /* WatchManager.swift */,
D0C9C12222FE414700FAB518 /* PresentationSurfaceLevels.swift */,
D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */,
D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */,
);
path = Sources;
sourceTree = "<group>";
@ -260,11 +266,13 @@
D0879B6322F7A97F00C4D6B3 /* OverlayMediaItemNode.swift in Sources */,
D0879B6B22F7B04400C4D6B3 /* DeviceContactData.swift in Sources */,
D0879B1922F70C7400C4D6B3 /* OpenChatMessage.swift in Sources */,
D0C9C3D72300CC2500FAB518 /* FetchMediaUtils.swift in Sources */,
D0879B1D22F7112E00C4D6B3 /* GalleryController.swift in Sources */,
D0879B1B22F70CF400C4D6B3 /* ChatController.swift in Sources */,
D0879A5022F65D4D00C4D6B3 /* ChatHistoryLocation.swift in Sources */,
D0879A4622F651D400C4D6B3 /* LiveLocationManager.swift in Sources */,
D0879AA222F6FEC800C4D6B3 /* OverlayAudioPlayerController.swift in Sources */,
D0C9C3D92300CC6000FAB518 /* IsMediaStreamable.swift in Sources */,
D0D3285F22F335B000D07EE2 /* AccountContext.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View file

@ -107,6 +107,44 @@ public final class AccountWithInfo: Equatable {
}
}
public enum OpenURLContext {
case generic
case chat
}
public struct ChatAvailableMessageActionOptions: OptionSet {
public var rawValue: Int32
public init(rawValue: Int32) {
self.rawValue = rawValue
}
public init() {
self.rawValue = 0
}
public static let deleteLocally = ChatAvailableMessageActionOptions(rawValue: 1 << 0)
public static let deleteGlobally = ChatAvailableMessageActionOptions(rawValue: 1 << 1)
public static let forward = ChatAvailableMessageActionOptions(rawValue: 1 << 2)
public static let report = ChatAvailableMessageActionOptions(rawValue: 1 << 3)
public static let viewStickerPack = ChatAvailableMessageActionOptions(rawValue: 1 << 4)
public static let rateCall = ChatAvailableMessageActionOptions(rawValue: 1 << 5)
public static let cancelSending = ChatAvailableMessageActionOptions(rawValue: 1 << 6)
public static let unsendPersonal = ChatAvailableMessageActionOptions(rawValue: 1 << 7)
public static let sendScheduledNow = ChatAvailableMessageActionOptions(rawValue: 1 << 8)
public static let editScheduledTime = ChatAvailableMessageActionOptions(rawValue: 1 << 9)
}
public struct ChatAvailableMessageActions {
public var options: ChatAvailableMessageActionOptions
public var banAuthor: Peer?
public init(options: ChatAvailableMessageActionOptions, banAuthor: Peer?) {
self.options = options
self.banAuthor = banAuthor
}
}
public protocol SharedAccountContext: class {
var basePath: String { get }
var mainWindow: Window1? { get }
@ -142,6 +180,9 @@ public protocol SharedAccountContext: class {
func openChatMessage(_ params: OpenChatMessageParams) -> Bool
func messageFromPreloadedChatHistoryViewForLocation(id: MessageId, location: ChatHistoryLocationInput, account: Account, chatLocation: ChatLocation, tagMask: MessageTags?) -> Signal<(MessageIndex?, Bool), NoError>
func makeOverlayAudioPlayerController(context: AccountContext, peerId: PeerId, type: MediaManagerPlayerType, initialMessageId: MessageId, initialOrder: MusicPlaybackSettingsOrder, parentNavigationController: NavigationController?) -> ViewController & OverlayAudioPlayerController
func makePeerInfoController(context: AccountContext, peer: Peer) -> ViewController?
func openExternalUrl(context: AccountContext, urlContext: OpenURLContext, url: String, forceExternal: Bool, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void)
func chatAvailableMessageActions(postbox: Postbox, accountPeerId: PeerId, messageIds: Set<MessageId>) -> Signal<ChatAvailableMessageActions, NoError>
func navigateToCurrentCall()
var hasOngoingCall: ValuePromise<Bool> { get }

View file

@ -4,23 +4,22 @@ import TelegramCore
import Postbox
import SwiftSignalKit
import TelegramUIPreferences
import AccountContext
public func freeMediaFileInteractiveFetched(account: Account, fileReference: FileMediaReference) -> Signal<FetchResourceSourceType, FetchResourceError> {
return fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: fileReference.resourceReference(fileReference.media.resource))
}
func freeMediaFileInteractiveFetched(fetchManager: FetchManager, fileReference: FileMediaReference, priority: FetchManagerPriority) -> Signal<Void, NoError> {
public func freeMediaFileInteractiveFetched(fetchManager: FetchManager, fileReference: FileMediaReference, priority: FetchManagerPriority) -> Signal<Void, NoError> {
let file = fileReference.media
let mediaReference = AnyMediaReference.standalone(media: fileReference.media)
return fetchManager.interactivelyFetched(category: fetchCategoryForFile(file), location: .chat(PeerId(namespace: 0, id: 0)), locationKey: .free, mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(file.resource), ranges: IndexSet(integersIn: 0 ..< Int(Int32.max) as Range<Int>), statsCategory: statsCategoryForFileWithAttributes(file.attributes), elevatedPriority: false, userInitiated: false, priority: priority, storeToDownloadsPeerType: nil)
}
func freeMediaFileResourceInteractiveFetched(account: Account, fileReference: FileMediaReference, resource: MediaResource) -> Signal<FetchResourceSourceType, FetchResourceError> {
public func freeMediaFileResourceInteractiveFetched(account: Account, fileReference: FileMediaReference, resource: MediaResource) -> Signal<FetchResourceSourceType, FetchResourceError> {
return fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: fileReference.resourceReference(resource))
}
func cancelFreeMediaFileInteractiveFetch(account: Account, file: TelegramMediaFile) {
public func cancelFreeMediaFileInteractiveFetch(account: Account, file: TelegramMediaFile) {
account.postbox.mediaBox.cancelInteractiveResourceFetch(file.resource)
}
@ -38,12 +37,12 @@ public func messageMediaFileInteractiveFetched(context: AccountContext, message:
return messageMediaFileInteractiveFetched(fetchManager: context.fetchManager, messageId: message.id, messageReference: MessageReference(message), file: file, userInitiated: userInitiated, priority: .userInitiated)
}
func messageMediaFileInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, file: TelegramMediaFile, ranges: IndexSet = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range<Int>), userInitiated: Bool, priority: FetchManagerPriority) -> Signal<Void, NoError> {
public func messageMediaFileInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, file: TelegramMediaFile, ranges: IndexSet = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range<Int>), userInitiated: Bool, priority: FetchManagerPriority) -> Signal<Void, NoError> {
let mediaReference = AnyMediaReference.message(message: messageReference, media: file)
return fetchManager.interactivelyFetched(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(file.resource), ranges: ranges, statsCategory: statsCategoryForFileWithAttributes(file.attributes), elevatedPriority: false, userInitiated: userInitiated, priority: priority, storeToDownloadsPeerType: nil)
}
func messageMediaFileCancelInteractiveFetch(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) {
public func messageMediaFileCancelInteractiveFetch(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) {
context.fetchManager.cancelInteractiveFetches(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource)
}
@ -51,15 +50,15 @@ public func messageMediaImageInteractiveFetched(context: AccountContext, message
return messageMediaImageInteractiveFetched(fetchManager: context.fetchManager, messageId: message.id, messageReference: MessageReference(message), image: image, resource: resource, userInitiated: true, priority: .userInitiated, storeToDownloadsPeerType: storeToDownloadsPeerType)
}
func messageMediaImageInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, image: TelegramMediaImage, resource: MediaResource, userInitiated: Bool, priority: FetchManagerPriority, storeToDownloadsPeerType: MediaAutoDownloadPeerType?) -> Signal<Void, NoError> {
public func messageMediaImageInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, image: TelegramMediaImage, resource: MediaResource, userInitiated: Bool, priority: FetchManagerPriority, storeToDownloadsPeerType: MediaAutoDownloadPeerType?) -> Signal<Void, NoError> {
let mediaReference = AnyMediaReference.message(message: messageReference, media: image)
return fetchManager.interactivelyFetched(category: .image, location: .chat(messageId.peerId), locationKey: .messageId(messageId), mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(resource), ranges: FetchCompleteRange, statsCategory: .image, elevatedPriority: false, userInitiated: userInitiated, priority: priority, storeToDownloadsPeerType: storeToDownloadsPeerType)
}
func messageMediaImageCancelInteractiveFetch(context: AccountContext, messageId: MessageId, image: TelegramMediaImage, resource: MediaResource) {
public func messageMediaImageCancelInteractiveFetch(context: AccountContext, messageId: MessageId, image: TelegramMediaImage, resource: MediaResource) {
context.fetchManager.cancelInteractiveFetches(category: .image, location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: resource)
}
func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) -> Signal<MediaResourceStatus, NoError> {
public func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) -> Signal<MediaResourceStatus, NoError> {
return context.fetchManager.fetchStatus(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource)
}

View file

@ -2,7 +2,7 @@ import Foundation
import Postbox
import TelegramCore
func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool {
public func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool {
if message.containsSecretMedia {
return false
}
@ -31,7 +31,7 @@ func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool {
return false
}
func isMediaStreamable(media: TelegramMediaFile) -> Bool {
public func isMediaStreamable(media: TelegramMediaFile) -> Bool {
guard let size = media.size else {
return false
}

View file

@ -0,0 +1,579 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C2952300A11000FAB518 /* CountrySelectionUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C2A12300A18C00FAB518 /* AuthorizationSequenceCountrySelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */; };
D0C9C2A22300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */; };
D0C9C2A52300A19900FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A42300A19900FAB518 /* Foundation.framework */; };
D0C9C2A72300A19C00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A62300A19C00FAB518 /* UIKit.framework */; };
D0C9C2A92300A19F00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A82300A19F00FAB518 /* Display.framework */; };
D0C9C2AB2300A1A500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */; };
D0C9C2AD2300A1AC00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */; };
D0C9C2AF2300A1B100FAB518 /* TelegramStringFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */; };
D0C9C2B52300A1F300FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */; };
D0C9C2D02300A2D400FAB518 /* SearchBarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */; };
D0C9C4472300DE5100FAB518 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4462300DE5100FAB518 /* CountryList.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CountrySelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CountrySelectionUI.h; sourceTree = "<group>"; };
D0C9C2942300A11000FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionController.swift; sourceTree = "<group>"; };
D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionControllerNode.swift; sourceTree = "<group>"; };
D0C9C2A42300A19900FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C2A62300A19C00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C2A82300A19F00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramStringFormatting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SearchBarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4462300DE5100FAB518 /* CountryList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CountryList.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C28D2300A11000FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C2D02300A2D400FAB518 /* SearchBarNode.framework in Frameworks */,
D0C9C2AF2300A1B100FAB518 /* TelegramStringFormatting.framework in Frameworks */,
D0C9C2AD2300A1AC00FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C2AB2300A1A500FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C2A92300A19F00FAB518 /* Display.framework in Frameworks */,
D0C9C2A72300A19C00FAB518 /* UIKit.framework in Frameworks */,
D0C9C2A52300A19900FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C2862300A11000FAB518 = {
isa = PBXGroup;
children = (
D0C9C2942300A11000FAB518 /* Info.plist */,
D0C9C2922300A11000FAB518 /* Sources */,
D0C9C2912300A11000FAB518 /* Products */,
D0C9C2A32300A19900FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C2912300A11000FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C2922300A11000FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C4462300DE5100FAB518 /* CountryList.swift */,
D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */,
D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */,
D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */,
D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C2A32300A19900FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */,
D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */,
D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */,
D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */,
D0C9C2A82300A19F00FAB518 /* Display.framework */,
D0C9C2A62300A19C00FAB518 /* UIKit.framework */,
D0C9C2A42300A19900FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C28B2300A11000FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C2952300A11000FAB518 /* CountrySelectionUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C28F2300A11000FAB518 /* CountrySelectionUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C2982300A11000FAB518 /* Build configuration list for PBXNativeTarget "CountrySelectionUI" */;
buildPhases = (
D0C9C28B2300A11000FAB518 /* Headers */,
D0C9C28C2300A11000FAB518 /* Sources */,
D0C9C28D2300A11000FAB518 /* Frameworks */,
D0C9C28E2300A11000FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = CountrySelectionUI;
productName = CountrySelectionUI;
productReference = D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C2872300A11000FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C28F2300A11000FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C28A2300A11000FAB518 /* Build configuration list for PBXProject "CountrySelectionUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C2862300A11000FAB518;
productRefGroup = D0C9C2912300A11000FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C28F2300A11000FAB518 /* CountrySelectionUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C28E2300A11000FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C28C2300A11000FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4472300DE5100FAB518 /* CountryList.swift in Sources */,
D0C9C2A22300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */,
D0C9C2A12300A18C00FAB518 /* AuthorizationSequenceCountrySelectionController.swift in Sources */,
D0C9C2B52300A1F300FAB518 /* FrameworkBundle.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C2962300A11000FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C2972300A11000FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C2992300A11000FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C29A2300A11000FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C29B2300A14F00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C29C2300A14F00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C29D2300A15A00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C29E2300A15A00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C28A2300A11000FAB518 /* Build configuration list for PBXProject "CountrySelectionUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C2962300A11000FAB518 /* DebugAppStoreLLC */,
D0C9C29B2300A14F00FAB518 /* DebugHockeyapp */,
D0C9C2972300A11000FAB518 /* ReleaseAppStoreLLC */,
D0C9C29D2300A15A00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C2982300A11000FAB518 /* Build configuration list for PBXNativeTarget "CountrySelectionUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C2992300A11000FAB518 /* DebugAppStoreLLC */,
D0C9C29C2300A14F00FAB518 /* DebugHockeyapp */,
D0C9C29A2300A11000FAB518 /* ReleaseAppStoreLLC */,
D0C9C29E2300A15A00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C2872300A11000FAB518 /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -4,6 +4,7 @@ import Display
import AsyncDisplayKit
import TelegramPresentationData
import TelegramStringFormatting
import SearchBarNode
private func loadCountryCodes() -> [(String, Int)] {
guard let filePath = frameworkBundle.path(forResource: "PhoneCountries", ofType: "txt") else {
@ -113,8 +114,8 @@ private final class AuthorizationSequenceCountrySelectionNavigationContentNode:
}
}
final class AuthorizationSequenceCountrySelectionController: ViewController {
static func lookupCountryNameById(_ id: String, strings: PresentationStrings) -> String? {
public final class AuthorizationSequenceCountrySelectionController: ViewController {
public static func lookupCountryNameById(_ id: String, strings: PresentationStrings) -> String? {
for (itemId, _) in countryCodes {
if id == itemId {
let locale = localeWithStrings(strings)
@ -127,7 +128,8 @@ final class AuthorizationSequenceCountrySelectionController: ViewController {
}
return nil
}
static func lookupCountryIdByCode(_ code: Int) -> String? {
public static func lookupCountryIdByCode(_ code: Int) -> String? {
for (itemId, itemCode) in countryCodes {
if itemCode == code {
return itemId
@ -146,10 +148,10 @@ final class AuthorizationSequenceCountrySelectionController: ViewController {
return self.displayNode as! AuthorizationSequenceCountrySelectionControllerNode
}
var completeWithCountryCode: ((Int, String) -> Void)?
var dismissed: (() -> Void)?
public var completeWithCountryCode: ((Int, String) -> Void)?
public var dismissed: (() -> Void)?
init(strings: PresentationStrings, theme: PresentationTheme, displayCodes: Bool = true) {
public init(strings: PresentationStrings, theme: PresentationTheme, displayCodes: Bool = true) {
self.theme = theme
self.strings = strings
self.displayCodes = displayCodes
@ -172,7 +174,7 @@ final class AuthorizationSequenceCountrySelectionController: ViewController {
self.navigationBar?.setContentNode(navigationContentNode, animated: false)
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@ -185,14 +187,14 @@ final class AuthorizationSequenceCountrySelectionController: ViewController {
self.displayNodeDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.controllerNode.animateIn()
self.navigationContentNode?.activate()
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
@ -203,7 +205,7 @@ final class AuthorizationSequenceCountrySelectionController: ViewController {
self.dismiss(completion: nil)
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
self.navigationContentNode?.deactivate()
self.controllerNode.animateOut(completion: { [weak self] in
self?.presentingViewController?.dismiss(animated: true, completion: nil)

View file

@ -64,7 +64,7 @@ private func loadCountriesInfo() -> [(Int, String, String)] {
let phoneCountriesInfo = loadCountriesInfo()
let countryCodeToIdAndName: [Int: (String, String)] = {
public let countryCodeToIdAndName: [Int: (String, String)] = {
var dict: [Int: (String, String)] = [:]
for (code, id, name) in phoneCountriesInfo {
if dict[code] == nil {
@ -74,12 +74,17 @@ let countryCodeToIdAndName: [Int: (String, String)] = {
return dict
}()
struct CountryCodeAndId: Hashable {
public struct CountryCodeAndId: Hashable {
let code: Int
let id: String
public init(code: Int, id: String) {
self.code = code
self.id = id
}
}
let countryCodeAndIdToName: [CountryCodeAndId: String] = {
public let countryCodeAndIdToName: [CountryCodeAndId: String] = {
var dict: [CountryCodeAndId: String] = [:]
for (code, id, name) in phoneCountriesInfo {
dict[CountryCodeAndId(code: code, id: id)] = name

View file

@ -0,0 +1,19 @@
//
// CountrySelectionUI.h
// CountrySelectionUI
//
// Created by Peter on 8/11/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for CountrySelectionUI.
FOUNDATION_EXPORT double CountrySelectionUIVersionNumber;
//! Project version string for CountrySelectionUI.
FOUNDATION_EXPORT const unsigned char CountrySelectionUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <CountrySelectionUI/PublicHeader.h>

View file

@ -0,0 +1,13 @@
import Foundation
import UIKit
private class FrameworkBundleClass: NSObject {
}
let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self)
extension UIImage {
convenience init?(bundleImageName: String) {
self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil)
}
}

View file

@ -0,0 +1,571 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C4D12300E60C00FAB518 /* DateSelectionUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C4D82300E64900FAB518 /* DateSelectionActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */; };
D0C9C4E32300EDB800FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E22300EDB800FAB518 /* Foundation.framework */; };
D0C9C4E52300EDC000FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E42300EDC000FAB518 /* UIKit.framework */; };
D0C9C4E72300EDC400FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E62300EDC400FAB518 /* Display.framework */; };
D0C9C4E92300EDC900FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */; };
D0C9C4EB2300EDCE00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */; };
D0C9C4ED2300EDD400FAB518 /* TelegramStringFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */; };
D0C9C4EF2300EE0E00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */; };
D0C9C4F12300EE2C00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DateSelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DateSelectionUI.h; sourceTree = "<group>"; };
D0C9C4D02300E60C00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateSelectionActionSheetController.swift; sourceTree = "<group>"; };
D0C9C4E22300EDB800FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C4E42300EDC000FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C4E62300EDC400FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramStringFormatting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C4C92300E60C00FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4F12300EE2C00FAB518 /* AccountContext.framework in Frameworks */,
D0C9C4EF2300EE0E00FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C4ED2300EDD400FAB518 /* TelegramStringFormatting.framework in Frameworks */,
D0C9C4EB2300EDCE00FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C4E92300EDC900FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C4E72300EDC400FAB518 /* Display.framework in Frameworks */,
D0C9C4E52300EDC000FAB518 /* UIKit.framework in Frameworks */,
D0C9C4E32300EDB800FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C4C22300E60C00FAB518 = {
isa = PBXGroup;
children = (
D0C9C4D02300E60C00FAB518 /* Info.plist */,
D0C9C4CE2300E60C00FAB518 /* Sources */,
D0C9C4CD2300E60C00FAB518 /* Products */,
D0C9C4E12300EDB800FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C4CD2300E60C00FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C4CE2300E60C00FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */,
D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C4E12300EDB800FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */,
D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */,
D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */,
D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */,
D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */,
D0C9C4E62300EDC400FAB518 /* Display.framework */,
D0C9C4E42300EDC000FAB518 /* UIKit.framework */,
D0C9C4E22300EDB800FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C4C72300E60C00FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4D12300E60C00FAB518 /* DateSelectionUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C4CB2300E60C00FAB518 /* DateSelectionUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C4D42300E60C00FAB518 /* Build configuration list for PBXNativeTarget "DateSelectionUI" */;
buildPhases = (
D0C9C4C72300E60C00FAB518 /* Headers */,
D0C9C4C82300E60C00FAB518 /* Sources */,
D0C9C4C92300E60C00FAB518 /* Frameworks */,
D0C9C4CA2300E60C00FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = DateSelectionUI;
productName = DateSelectionUI;
productReference = D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C4C32300E60C00FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C4CB2300E60C00FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C4C62300E60C00FAB518 /* Build configuration list for PBXProject "DateSelectionUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C4C22300E60C00FAB518;
productRefGroup = D0C9C4CD2300E60C00FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C4CB2300E60C00FAB518 /* DateSelectionUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C4CA2300E60C00FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C4C82300E60C00FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4D82300E64900FAB518 /* DateSelectionActionSheetController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C4D22300E60C00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C4D32300E60C00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C4D52300E60C00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C4D62300E60C00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C4DD2300ED8800FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C4DE2300ED8800FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C4DF2300ED9600FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C4E02300ED9600FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C4C62300E60C00FAB518 /* Build configuration list for PBXProject "DateSelectionUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4D22300E60C00FAB518 /* DebugAppStoreLLC */,
D0C9C4DD2300ED8800FAB518 /* DebugHockeyapp */,
D0C9C4D32300E60C00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4DF2300ED9600FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C4D42300E60C00FAB518 /* Build configuration list for PBXNativeTarget "DateSelectionUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4D52300E60C00FAB518 /* DebugAppStoreLLC */,
D0C9C4DE2300ED8800FAB518 /* DebugHockeyapp */,
D0C9C4D62300E60C00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4E02300ED9600FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C4C32300E60C00FAB518 /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -2,23 +2,20 @@ import Foundation
import UIKit
import Display
import AsyncDisplayKit
import UIKit
import SwiftSignalKit
import TelegramCore
import Photos
import TelegramPresentationData
import TelegramStringFormatting
import SwiftSignalKit
import AccountContext
final class DateSelectionActionSheetController: ActionSheetController {
public final class DateSelectionActionSheetController: ActionSheetController {
private var presentationDisposable: Disposable?
private let _ready = Promise<Bool>()
override var ready: Promise<Bool> {
override public var ready: Promise<Bool> {
return self._ready
}
init(context: AccountContext, title: String?, currentValue: Int32, minimumDate: Date? = nil, maximumDate: Date? = nil, emptyTitle: String? = nil, applyValue: @escaping (Int32?) -> Void) {
public init(context: AccountContext, title: String?, currentValue: Int32, minimumDate: Date? = nil, maximumDate: Date? = nil, emptyTitle: String? = nil, applyValue: @escaping (Int32?) -> Void) {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
let theme = presentationData.theme
let strings = presentationData.strings
@ -61,7 +58,7 @@ final class DateSelectionActionSheetController: ActionSheetController {
])
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

View file

@ -0,0 +1,19 @@
//
// DateSelectionUI.h
// DateSelectionUI
//
// Created by Peter on 8/12/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for DateSelectionUI.
FOUNDATION_EXPORT double DateSelectionUIVersionNumber;
//! Project version string for DateSelectionUI.
FOUNDATION_EXPORT const unsigned char DateSelectionUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <DateSelectionUI/PublicHeader.h>

View file

@ -0,0 +1,703 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C2F52300A51400FAB518 /* GalleryUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C2F32300A51400FAB518 /* GalleryUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C3082300A58500FAB518 /* GalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */; };
D0C9C3092300A58500FAB518 /* GalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FC2300A58400FAB518 /* GalleryController.swift */; };
D0C9C30A2300A58500FAB518 /* GalleryNavigationCheckNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */; };
D0C9C30B2300A58500FAB518 /* GalleryFooterNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */; };
D0C9C30C2300A58500FAB518 /* GalleryControllerPresentationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */; };
D0C9C30D2300A58500FAB518 /* GalleryNavigationRecipientNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */; };
D0C9C30E2300A58500FAB518 /* GalleryControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */; };
D0C9C30F2300A58500FAB518 /* GalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */; };
D0C9C3102300A58500FAB518 /* GalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */; };
D0C9C3112300A58500FAB518 /* GalleryVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */; };
D0C9C3122300A58500FAB518 /* GalleryThumbnailContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */; };
D0C9C3132300A58500FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */; };
D0C9C3142300A58500FAB518 /* GalleryPagerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */; };
D0C9C31B2300A9B900FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31A2300A9B900FAB518 /* Foundation.framework */; };
D0C9C31D2300A9BD00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31C2300A9BD00FAB518 /* UIKit.framework */; };
D0C9C31F2300A9C000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31E2300A9C000FAB518 /* Display.framework */; };
D0C9C3212300A9C500FAB518 /* QuickLook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3202300A9C500FAB518 /* QuickLook.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
D0C9C3232300A9C800FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3222300A9C800FAB518 /* Postbox.framework */; };
D0C9C3252300A9CD00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */; };
D0C9C3272300A9D100FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3262300A9D100FAB518 /* TelegramCore.framework */; };
D0C9C3292300A9D500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */; };
D0C9C32B2300A9D900FAB518 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32A2300A9D900FAB518 /* SafariServices.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
D0C9C32D2300A9E900FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */; };
D0C9C32F2300A9EF00FAB518 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */; };
D0C9C3312300A9F400FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3302300A9F400FAB518 /* AccountContext.framework */; };
D0C9C3442300AA8A00FAB518 /* ChatImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */; };
D0C9C3452300AA8A00FAB518 /* UniversalVideoGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */; };
D0C9C3462300AA8A00FAB518 /* ChatExternalFileGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */; };
D0C9C3492300AA8A00FAB518 /* SecretMediaPreviewFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */; };
D0C9C34A2300AA8A00FAB518 /* ChatItemGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */; };
D0C9C34C2300AA8A00FAB518 /* ZoomableContentGalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */; };
D0C9C34D2300AA8A00FAB518 /* ChatAnimationGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */; };
D0C9C34E2300AA8A00FAB518 /* SecretMediaPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */; };
D0C9C34F2300AA8A00FAB518 /* ChatDocumentGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */; };
D0C9C3502300AA8A00FAB518 /* ChatVideoGalleryItemScrubberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */; };
D0C9C3962300B45700FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */; };
D0C9C3C32300B73200FAB518 /* WebsiteType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3C22300B73200FAB518 /* WebsiteType.framework */; };
D0C9C3FD2300D59B00FAB518 /* ScreenCaptureDetection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */; };
D0C9C43B2300D6DC00FAB518 /* OpenInExternalAppUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */; };
D0C9C4412300D91200FAB518 /* GalleryItemTransitionNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C2F02300A51400FAB518 /* GalleryUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GalleryUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2F32300A51400FAB518 /* GalleryUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GalleryUI.h; sourceTree = "<group>"; };
D0C9C2F42300A51400FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItem.swift; sourceTree = "<group>"; };
D0C9C2FC2300A58400FAB518 /* GalleryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryController.swift; sourceTree = "<group>"; };
D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryNavigationCheckNode.swift; sourceTree = "<group>"; };
D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterNode.swift; sourceTree = "<group>"; };
D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerPresentationState.swift; sourceTree = "<group>"; };
D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryNavigationRecipientNode.swift; sourceTree = "<group>"; };
D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerNode.swift; sourceTree = "<group>"; };
D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItemNode.swift; sourceTree = "<group>"; };
D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterContentNode.swift; sourceTree = "<group>"; };
D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryVideoDecoration.swift; sourceTree = "<group>"; };
D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryThumbnailContainerNode.swift; sourceTree = "<group>"; };
D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryPagerNode.swift; sourceTree = "<group>"; };
D0C9C31A2300A9B900FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C31C2300A9BD00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C31E2300A9C000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3202300A9C500FAB518 /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = System/Library/Frameworks/QuickLook.framework; sourceTree = SDKROOT; };
D0C9C3222300A9C800FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3262300A9D100FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C32A2300A9D900FAB518 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3302300A9F400FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatImageGalleryItem.swift; sourceTree = "<group>"; };
D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UniversalVideoGalleryItem.swift; sourceTree = "<group>"; };
D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatExternalFileGalleryItem.swift; sourceTree = "<group>"; };
D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewFooterContentNode.swift; sourceTree = "<group>"; };
D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatItemGalleryFooterContentNode.swift; sourceTree = "<group>"; };
D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZoomableContentGalleryItemNode.swift; sourceTree = "<group>"; };
D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatAnimationGalleryItem.swift; sourceTree = "<group>"; };
D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewController.swift; sourceTree = "<group>"; };
D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatDocumentGalleryItem.swift; sourceTree = "<group>"; };
D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatVideoGalleryItemScrubberView.swift; sourceTree = "<group>"; };
D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUniversalVideoContent.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3C22300B73200FAB518 /* WebsiteType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebsiteType.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ScreenCaptureDetection.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OpenInExternalAppUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryItemTransitionNode.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C2ED2300A51400FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C43B2300D6DC00FAB518 /* OpenInExternalAppUI.framework in Frameworks */,
D0C9C3FD2300D59B00FAB518 /* ScreenCaptureDetection.framework in Frameworks */,
D0C9C3C32300B73200FAB518 /* WebsiteType.framework in Frameworks */,
D0C9C3962300B45700FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */,
D0C9C3312300A9F400FAB518 /* AccountContext.framework in Frameworks */,
D0C9C32F2300A9EF00FAB518 /* TextFormat.framework in Frameworks */,
D0C9C32D2300A9E900FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C32B2300A9D900FAB518 /* SafariServices.framework in Frameworks */,
D0C9C3292300A9D500FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C3272300A9D100FAB518 /* TelegramCore.framework in Frameworks */,
D0C9C3252300A9CD00FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C3232300A9C800FAB518 /* Postbox.framework in Frameworks */,
D0C9C3212300A9C500FAB518 /* QuickLook.framework in Frameworks */,
D0C9C31F2300A9C000FAB518 /* Display.framework in Frameworks */,
D0C9C31D2300A9BD00FAB518 /* UIKit.framework in Frameworks */,
D0C9C31B2300A9B900FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C2E62300A51400FAB518 = {
isa = PBXGroup;
children = (
D0C9C2F42300A51400FAB518 /* Info.plist */,
D0C9C2F22300A51400FAB518 /* Sources */,
D0C9C2F12300A51400FAB518 /* Products */,
D0C9C3192300A9B900FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C2F12300A51400FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C2F02300A51400FAB518 /* GalleryUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C2F22300A51400FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C3522300AA8C00FAB518 /* Items */,
D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */,
D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */,
D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */,
D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */,
D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */,
D0C9C2FC2300A58400FAB518 /* GalleryController.swift */,
D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */,
D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */,
D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */,
D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */,
D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */,
D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */,
D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */,
D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */,
D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */,
D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */,
D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */,
D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */,
D0C9C2F32300A51400FAB518 /* GalleryUI.h */,
D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C3192300A9B900FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */,
D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */,
D0C9C3C22300B73200FAB518 /* WebsiteType.framework */,
D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */,
D0C9C3302300A9F400FAB518 /* AccountContext.framework */,
D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */,
D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */,
D0C9C32A2300A9D900FAB518 /* SafariServices.framework */,
D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */,
D0C9C3262300A9D100FAB518 /* TelegramCore.framework */,
D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */,
D0C9C3222300A9C800FAB518 /* Postbox.framework */,
D0C9C3202300A9C500FAB518 /* QuickLook.framework */,
D0C9C31E2300A9C000FAB518 /* Display.framework */,
D0C9C31C2300A9BD00FAB518 /* UIKit.framework */,
D0C9C31A2300A9B900FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
D0C9C3522300AA8C00FAB518 /* Items */ = {
isa = PBXGroup;
children = (
D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */,
D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */,
D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */,
D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */,
D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */,
);
path = Items;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C2EB2300A51400FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C2F52300A51400FAB518 /* GalleryUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C2EF2300A51400FAB518 /* GalleryUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C2F82300A51400FAB518 /* Build configuration list for PBXNativeTarget "GalleryUI" */;
buildPhases = (
D0C9C2EB2300A51400FAB518 /* Headers */,
D0C9C2EC2300A51400FAB518 /* Sources */,
D0C9C2ED2300A51400FAB518 /* Frameworks */,
D0C9C2EE2300A51400FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = GalleryUI;
productName = GalleryUI;
productReference = D0C9C2F02300A51400FAB518 /* GalleryUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C2E72300A51400FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C2EF2300A51400FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C2EA2300A51400FAB518 /* Build configuration list for PBXProject "GalleryUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C2E62300A51400FAB518;
productRefGroup = D0C9C2F12300A51400FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C2EF2300A51400FAB518 /* GalleryUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C2EE2300A51400FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C2EC2300A51400FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C30E2300A58500FAB518 /* GalleryControllerNode.swift in Sources */,
D0C9C3502300AA8A00FAB518 /* ChatVideoGalleryItemScrubberView.swift in Sources */,
D0C9C34C2300AA8A00FAB518 /* ZoomableContentGalleryItemNode.swift in Sources */,
D0C9C3102300A58500FAB518 /* GalleryFooterContentNode.swift in Sources */,
D0C9C30A2300A58500FAB518 /* GalleryNavigationCheckNode.swift in Sources */,
D0C9C34E2300AA8A00FAB518 /* SecretMediaPreviewController.swift in Sources */,
D0C9C30C2300A58500FAB518 /* GalleryControllerPresentationState.swift in Sources */,
D0C9C4412300D91200FAB518 /* GalleryItemTransitionNode.swift in Sources */,
D0C9C30D2300A58500FAB518 /* GalleryNavigationRecipientNode.swift in Sources */,
D0C9C3092300A58500FAB518 /* GalleryController.swift in Sources */,
D0C9C30F2300A58500FAB518 /* GalleryItemNode.swift in Sources */,
D0C9C3142300A58500FAB518 /* GalleryPagerNode.swift in Sources */,
D0C9C3452300AA8A00FAB518 /* UniversalVideoGalleryItem.swift in Sources */,
D0C9C3122300A58500FAB518 /* GalleryThumbnailContainerNode.swift in Sources */,
D0C9C3462300AA8A00FAB518 /* ChatExternalFileGalleryItem.swift in Sources */,
D0C9C34D2300AA8A00FAB518 /* ChatAnimationGalleryItem.swift in Sources */,
D0C9C3442300AA8A00FAB518 /* ChatImageGalleryItem.swift in Sources */,
D0C9C34F2300AA8A00FAB518 /* ChatDocumentGalleryItem.swift in Sources */,
D0C9C3132300A58500FAB518 /* FrameworkBundle.swift in Sources */,
D0C9C3082300A58500FAB518 /* GalleryItem.swift in Sources */,
D0C9C3112300A58500FAB518 /* GalleryVideoDecoration.swift in Sources */,
D0C9C34A2300AA8A00FAB518 /* ChatItemGalleryFooterContentNode.swift in Sources */,
D0C9C30B2300A58500FAB518 /* GalleryFooterNode.swift in Sources */,
D0C9C3492300AA8A00FAB518 /* SecretMediaPreviewFooterContentNode.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C2F62300A51400FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C2F72300A51400FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C2F92300A51400FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C2FA2300A51400FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C3152300A99100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C3162300A99100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C3172300A99D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C3182300A99D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C2EA2300A51400FAB518 /* Build configuration list for PBXProject "GalleryUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C2F62300A51400FAB518 /* DebugAppStoreLLC */,
D0C9C3152300A99100FAB518 /* DebugHockeyapp */,
D0C9C2F72300A51400FAB518 /* ReleaseAppStoreLLC */,
D0C9C3172300A99D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C2F82300A51400FAB518 /* Build configuration list for PBXNativeTarget "GalleryUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C2F92300A51400FAB518 /* DebugAppStoreLLC */,
D0C9C3162300A99100FAB518 /* DebugHockeyapp */,
D0C9C2FA2300A51400FAB518 /* ReleaseAppStoreLLC */,
D0C9C3182300A99D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C2E72300A51400FAB518 /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -12,6 +12,7 @@ import TelegramStringFormatting
import AccountContext
import RadialStatusNode
import ShareController
import OpenInExternalAppUI
private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white)
private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white)
@ -808,7 +809,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
}
private func commitDeleteMessages(_ messages: [Message], ask: Bool) {
self.messageContextDisposable.set((chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: Set(messages.map { $0.id })) |> deliverOnMainQueue).start(next: { [weak self] actions in
self.messageContextDisposable.set((self.context.sharedContext.chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: Set(messages.map { $0.id })) |> deliverOnMainQueue).start(next: { [weak self] actions in
if let strongSelf = self, let controllerInteration = strongSelf.controllerInteraction, !actions.options.isEmpty {
let actionSheet = ActionSheetController(presentationTheme: strongSelf.theme)
var items: [ActionSheetItem] = []
@ -906,7 +907,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
if let strongSelf = self {
let openInController = OpenInActionSheetController(context: strongSelf.context, item: item, additionalAction: nil, openUrl: { [weak self] url in
if let strongSelf = self {
openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {})
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {})
}
})
strongSelf.controllerInteraction?.presentController(openInController, nil)
@ -915,7 +916,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
} else {
preferredAction = .custom(action: ShareControllerAction(title: presentationData.strings.Web_OpenExternal, action: { [weak self] in
if let strongSelf = self {
openExternalUrl(context: strongSelf.context, url: content.url, presentationData: presentationData, navigationController: nil, dismissInput: {})
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: content.url, forceExternal: false, presentationData: presentationData, navigationController: nil, dismissInput: {})
}
}))
}
@ -1017,7 +1018,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
if let strongSelf = self {
let openInController = OpenInActionSheetController(context: strongSelf.context, item: item, additionalAction: nil, openUrl: { [weak self] url in
if let strongSelf = self {
openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {})
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {})
}
})
strongSelf.controllerInteraction?.presentController(openInController, nil)
@ -1026,7 +1027,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll
} else {
preferredAction = .custom(action: ShareControllerAction(title: presentationData.strings.Web_OpenExternal, action: { [weak self] in
if let strongSelf = self {
openExternalUrl(context: strongSelf.context, url: content.url, presentationData: presentationData, navigationController: nil, dismissInput: {})
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: content.url, forceExternal: false, presentationData: presentationData, navigationController: nil, dismissInput: {})
}
}))
}

View file

@ -0,0 +1,14 @@
import Foundation
import UIKit
private class FrameworkBundleClass: NSObject {
}
let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self)
private let screenScaleFactor = Int(UIScreen.main.scale)
extension UIImage {
convenience init?(bundleImageName: String) {
self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil)
}
}

View file

@ -10,6 +10,9 @@ import SafariServices
import TelegramPresentationData
import TextFormat
import AccountContext
import TelegramUniversalVideoContent
import WebsiteType
import OpenInExternalAppUI
private func tagsForMessage(_ message: Message) -> MessageTags? {
for media in message.media {
@ -95,7 +98,7 @@ private let internalMimePrefixes: [String] = [
"image/png"
]
func internalDocumentItemSupportsMimeType(_ type: String, fileName: String?) -> Bool {
public func internalDocumentItemSupportsMimeType(_ type: String, fileName: String?) -> Bool {
if let fileName = fileName {
let ext = (fileName as NSString).pathExtension
if internalExtensions.contains(ext.lowercased()) {
@ -123,7 +126,7 @@ private let italicFont = Font.italic(16.0)
private let boldItalicFont = Font.semiboldItalic(16.0)
private let fixedFont = UIFont(name: "Menlo-Regular", size: 15.0) ?? textFont
func galleryCaptionStringWithAppliedEntities(_ text: String, entities: [MessageTextEntity]) -> NSAttributedString {
public func galleryCaptionStringWithAppliedEntities(_ text: String, entities: [MessageTextEntity]) -> NSAttributedString {
return stringWithAppliedEntities(text, entities: entities, baseColor: .white, linkColor: UIColor(rgb: 0x5ac8fa), baseFont: textFont, linkFont: textFont, boldFont: boldFont, italicFont: italicFont, boldItalicFont: boldItalicFont, fixedFont: fixedFont, blockQuoteFont: textFont, underlineLinks: false)
}
@ -136,7 +139,7 @@ private func galleryMessageCaptionText(_ message: Message) -> String {
return message.text
}
func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? {
public func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? {
let message = entry.message
let location = entry.location
if let (media, mediaImage) = mediaForMessage(message: message) {
@ -192,7 +195,7 @@ func galleryItemForEntry(context: AccountContext, presentationData: Presentation
}
} else if let webpage = media as? TelegramMediaWebpage, case let .Loaded(webpageContent) = webpage.content {
var content: UniversalVideoContent?
switch websiteType(of: webpageContent) {
switch websiteType(of: webpageContent.websiteName) {
case .instagram where webpageContent.file != nil && webpageContent.image != nil && webpageContent.file!.isVideo:
content = NativeVideoContent(id: .message(message.stableId, webpageContent.file?.id ?? webpage.webpageId), fileReference: .message(message: MessageReference(message), media: webpageContent.file!), imageReference: webpageContent.image.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, enableSound: true)
default:
@ -217,21 +220,21 @@ func galleryItemForEntry(context: AccountContext, presentationData: Presentation
return nil
}
final class GalleryTransitionArguments {
let transitionNode: (ASDisplayNode, () -> (UIView?, UIView?))
let addToTransitionSurface: (UIView) -> Void
public final class GalleryTransitionArguments {
public let transitionNode: (ASDisplayNode, () -> (UIView?, UIView?))
public let addToTransitionSurface: (UIView) -> Void
init(transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)), addToTransitionSurface: @escaping (UIView) -> Void) {
public init(transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)), addToTransitionSurface: @escaping (UIView) -> Void) {
self.transitionNode = transitionNode
self.addToTransitionSurface = addToTransitionSurface
}
}
final class GalleryControllerPresentationArguments {
let animated: Bool
let transitionArguments: (MessageId, Media) -> GalleryTransitionArguments?
public final class GalleryControllerPresentationArguments {
public let animated: Bool
public let transitionArguments: (MessageId, Media) -> GalleryTransitionArguments?
init(animated: Bool = true, transitionArguments: @escaping (MessageId, Media) -> GalleryTransitionArguments?) {
public init(animated: Bool = true, transitionArguments: @escaping (MessageId, Media) -> GalleryTransitionArguments?) {
self.animated = animated
self.transitionArguments = transitionArguments
}
@ -251,12 +254,12 @@ private enum GalleryMessageHistoryView {
}
}
enum GalleryControllerItemSource {
public enum GalleryControllerItemSource {
case peerMessagesAtId(MessageId)
case standaloneMessage(Message)
}
enum GalleryControllerInteractionTapAction {
public enum GalleryControllerInteractionTapAction {
case url(url: String, concealed: Bool)
case textMention(String)
case peerMention(PeerId, String)
@ -269,9 +272,9 @@ public enum GalleryControllerItemNodeAction {
case timecode(Double)
}
class GalleryController: ViewController {
static let darkNavigationTheme = NavigationBarTheme(buttonColor: .white, disabledButtonColor: UIColor(rgb: 0x525252), primaryTextColor: .white, backgroundColor: UIColor(white: 0.0, alpha: 0.6), separatorColor: UIColor(white: 0.0, alpha: 0.8), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear)
static let lightNavigationTheme = NavigationBarTheme(buttonColor: UIColor(rgb: 0x007ee5), disabledButtonColor: UIColor(rgb: 0xd0d0d0), primaryTextColor: .black, backgroundColor: UIColor(red: 0.968626451, green: 0.968626451, blue: 0.968626451, alpha: 1.0), separatorColor: UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear)
public class GalleryController: ViewController {
public static let darkNavigationTheme = NavigationBarTheme(buttonColor: .white, disabledButtonColor: UIColor(rgb: 0x525252), primaryTextColor: .white, backgroundColor: UIColor(white: 0.0, alpha: 0.6), separatorColor: UIColor(white: 0.0, alpha: 0.8), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear)
public static let lightNavigationTheme = NavigationBarTheme(buttonColor: UIColor(rgb: 0x007ee5), disabledButtonColor: UIColor(rgb: 0xd0d0d0), primaryTextColor: .black, backgroundColor: UIColor(red: 0.968626451, green: 0.968626451, blue: 0.968626451, alpha: 1.0), separatorColor: UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear)
private var galleryNode: GalleryControllerNode {
return self.displayNode as! GalleryControllerNode
@ -284,14 +287,14 @@ class GalleryController: ViewController {
private let streamVideos: Bool
private let _ready = Promise<Bool>()
override var ready: Promise<Bool> {
override public var ready: Promise<Bool> {
return self._ready
}
private var didSetReady = false
private var adjustedForInitialPreviewingLayout = false
var temporaryDoNotWaitForReady = false
public var temporaryDoNotWaitForReady = false
private let fromPlayingVideo: Bool
private let landscape: Bool
private let timecode: Double?
@ -321,7 +324,7 @@ class GalleryController: ViewController {
private var performAction: (GalleryControllerInteractionTapAction) -> Void
private var openActionOptions: (GalleryControllerInteractionTapAction) -> Void
init(context: AccountContext, source: GalleryControllerItemSource, invertItemOrder: Bool = false, streamSingleVideo: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, synchronousLoad: Bool = false, replaceRootController: @escaping (ViewController, ValuePromise<Bool>?) -> Void, baseNavigationController: NavigationController?, actionInteraction: GalleryControllerActionInteraction? = nil) {
public init(context: AccountContext, source: GalleryControllerItemSource, invertItemOrder: Bool = false, streamSingleVideo: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, synchronousLoad: Bool = false, replaceRootController: @escaping (ViewController, ValuePromise<Bool>?) -> Void, baseNavigationController: NavigationController?, actionInteraction: GalleryControllerActionInteraction? = nil) {
self.context = context
self.source = source
self.replaceRootController = replaceRootController
@ -746,7 +749,7 @@ class GalleryController: ViewController {
}
}
@objc func donePressed() {
@objc private func donePressed() {
self.dismiss(forceAway: false)
}
@ -778,7 +781,7 @@ class GalleryController: ViewController {
})
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
let controllerInteraction = GalleryControllerInteraction(presentController: { [weak self] controller, arguments in
if let strongSelf = self {
strongSelf.present(controller, in: .window(.root), with: arguments, blockInteraction: true)
@ -896,11 +899,11 @@ class GalleryController: ViewController {
}
}
override func viewWillAppear(_ animated: Bool) {
override public func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var nodeAnimatesItself = false
@ -939,13 +942,13 @@ class GalleryController: ViewController {
self.accountInUseDisposable.set(self.context.sharedContext.setAccountUserInterfaceInUse(self.context.account.id))
}
override func viewDidDisappear(_ animated: Bool) {
override public func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.accountInUseDisposable.set(nil)
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.galleryNode.frame = CGRect(origin: CGPoint(), size: layout.size)

View file

@ -5,30 +5,30 @@ import Display
import Postbox
import SwipeToDismissGesture
class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate {
var statusBar: StatusBar?
var navigationBar: NavigationBar?
let footerNode: GalleryFooterNode
var currentThumbnailContainerNode: GalleryThumbnailContainerNode?
var overlayNode: ASDisplayNode?
var transitionDataForCentralItem: (() -> ((ASDisplayNode, () -> (UIView?, UIView?))?, (UIView) -> Void)?)?
var dismiss: (() -> Void)?
open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate {
public var statusBar: StatusBar?
public var navigationBar: NavigationBar?
public let footerNode: GalleryFooterNode
public var currentThumbnailContainerNode: GalleryThumbnailContainerNode?
public var overlayNode: ASDisplayNode?
public var transitionDataForCentralItem: (() -> ((ASDisplayNode, () -> (UIView?, UIView?))?, (UIView) -> Void)?)?
public var dismiss: (() -> Void)?
var containerLayout: (CGFloat, ContainerViewLayout)?
var backgroundNode: ASDisplayNode
var scrollView: UIScrollView
var pager: GalleryPagerNode
public var containerLayout: (CGFloat, ContainerViewLayout)?
public var backgroundNode: ASDisplayNode
public var scrollView: UIScrollView
public var pager: GalleryPagerNode
var beginCustomDismiss: () -> Void = { }
var completeCustomDismiss: () -> Void = { }
var baseNavigationController: () -> NavigationController? = { return nil }
public var beginCustomDismiss: () -> Void = { }
public var completeCustomDismiss: () -> Void = { }
public var baseNavigationController: () -> NavigationController? = { return nil }
private var presentationState = GalleryControllerPresentationState()
private var isDismissed = false
var areControlsHidden = false
var isBackgroundExtendedOverNavigationBar = true {
public var areControlsHidden = false
public var isBackgroundExtendedOverNavigationBar = true {
didSet {
if let (navigationBarHeight, layout) = self.containerLayout {
self.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight), size: CGSize(width: layout.size.width, height: layout.size.height - (self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight)))
@ -36,7 +36,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
init(controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0) {
public init(controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0) {
self.backgroundNode = ASDisplayNode()
self.backgroundNode.backgroundColor = UIColor.black
self.scrollView = UIScrollView()
@ -216,7 +216,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
override func didLoad() {
override open func didLoad() {
super.didLoad()
if #available(iOSApplicationExtension 11.0, iOS 11.0, *), !self.isLayerBacked {
@ -224,7 +224,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
open func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
self.containerLayout = (navigationBarHeight, layout)
transition.updateFrame(node: self.backgroundNode, frame: CGRect(origin: CGPoint(x: 0.0, y: self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight), size: CGSize(width: layout.size.width, height: layout.size.height - (self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight))))
@ -263,7 +263,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
self.pager.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition)
}
func setControlsHidden(_ hidden: Bool, animated: Bool) {
open func setControlsHidden(_ hidden: Bool, animated: Bool) {
self.areControlsHidden = hidden
if animated {
UIView.animate(withDuration: 0.3, animations: {
@ -282,14 +282,14 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func updateThumbnailContainerNodeAlpha(_ transition: ContainedViewLayoutTransition) {
open func updateThumbnailContainerNodeAlpha(_ transition: ContainedViewLayoutTransition) {
if let currentThumbnailContainerNode = self.currentThumbnailContainerNode, let layout = self.containerLayout?.1 {
let visible = layout.size.width < layout.size.height && !self.areControlsHidden
transition.updateAlpha(node: currentThumbnailContainerNode, alpha: visible ? 1.0 : 0.0)
}
}
func animateIn(animateContent: Bool) {
open func animateIn(animateContent: Bool) {
self.backgroundNode.backgroundColor = self.backgroundNode.backgroundColor?.withAlphaComponent(0.0)
self.statusBar?.alpha = 0.0
self.navigationBar?.alpha = 0.0
@ -311,7 +311,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func animateOut(animateContent: Bool, completion: @escaping () -> Void) {
open func animateOut(animateContent: Bool, completion: @escaping () -> Void) {
self.isDismissed = true
self.pager.isScrollEnabled = false
@ -349,13 +349,13 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func updateDismissTransition(_ value: CGFloat) {
open func updateDismissTransition(_ value: CGFloat) {
}
func updateDistanceFromEquilibrium(_ value: CGFloat) {
open func updateDistanceFromEquilibrium(_ value: CGFloat) {
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
open func scrollViewDidScroll(_ scrollView: UIScrollView) {
if self.isDismissed {
return
}
@ -385,7 +385,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
open func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
targetContentOffset.pointee = scrollView.contentOffset
let distanceFromEquilibrium = scrollView.contentOffset.y - scrollView.contentSize.height / 3.0
@ -433,14 +433,14 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog
}
}
func updatePresentationState(_ f: (GalleryControllerPresentationState) -> GalleryControllerPresentationState, transition: ContainedViewLayoutTransition) {
open func updatePresentationState(_ f: (GalleryControllerPresentationState) -> GalleryControllerPresentationState, transition: ContainedViewLayoutTransition) {
self.presentationState = f(self.presentationState)
if let (navigationBarHeight, layout) = self.containerLayout {
self.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition)
}
}
@objc func panGesture(_ recognizer: SwipeToDismissGestureRecognizer) {
@objc private func panGesture(_ recognizer: SwipeToDismissGestureRecognizer) {
switch recognizer.state {
case .began:
break

View file

@ -0,0 +1,17 @@
import Foundation
public final class GalleryControllerPresentationState {
public let footerContentNode: GalleryFooterContentNode?
public init() {
self.footerContentNode = nil
}
public init(footerContentNode: GalleryFooterContentNode?) {
self.footerContentNode = footerContentNode
}
public func withUpdatedFooterContentNode(_ footerContentNode: GalleryFooterContentNode?) -> GalleryControllerPresentationState {
return GalleryControllerPresentationState(footerContentNode: footerContentNode)
}
}

View file

@ -0,0 +1,33 @@
import Foundation
import UIKit
import AsyncDisplayKit
import Display
import SwiftSignalKit
public final class GalleryControllerInteraction {
public let presentController: (ViewController, ViewControllerPresentationArguments?) -> Void
public let dismissController: () -> Void
public let replaceRootController: (ViewController, ValuePromise<Bool>?) -> Void
public init(presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, dismissController: @escaping () -> Void, replaceRootController: @escaping (ViewController, ValuePromise<Bool>?) -> Void) {
self.presentController = presentController
self.dismissController = dismissController
self.replaceRootController = replaceRootController
}
}
open class GalleryFooterContentNode: ASDisplayNode {
public var requestLayout: ((ContainedViewLayoutTransition) -> Void)?
public var controllerInteraction: GalleryControllerInteraction?
open func updateLayout(size: CGSize, metrics: LayoutMetrics, leftInset: CGFloat, rightInset: CGFloat, bottomInset: CGFloat, contentInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat {
return 0.0
}
open func animateIn(fromHeight: CGFloat, previousContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition) {
}
open func animateOut(toHeight: CGFloat, nextContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) {
completion()
}
}

View file

@ -3,7 +3,7 @@ import UIKit
import AsyncDisplayKit
import Display
final class GalleryFooterNode: ASDisplayNode {
public final class GalleryFooterNode: ASDisplayNode {
private let backgroundNode: ASDisplayNode
private var currentFooterContentNode: GalleryFooterContentNode?
@ -11,7 +11,7 @@ final class GalleryFooterNode: ASDisplayNode {
private let controllerInteraction: GalleryControllerInteraction
init(controllerInteraction: GalleryControllerInteraction) {
public init(controllerInteraction: GalleryControllerInteraction) {
self.controllerInteraction = controllerInteraction
self.backgroundNode = ASDisplayNode()
@ -22,7 +22,7 @@ final class GalleryFooterNode: ASDisplayNode {
self.addSubnode(self.backgroundNode)
}
func updateLayout(_ layout: ContainerViewLayout, footerContentNode: GalleryFooterContentNode?, thumbnailPanelHeight: CGFloat, transition: ContainedViewLayoutTransition) {
public func updateLayout(_ layout: ContainerViewLayout, footerContentNode: GalleryFooterContentNode?, thumbnailPanelHeight: CGFloat, transition: ContainedViewLayoutTransition) {
self.currentLayout = (layout, thumbnailPanelHeight)
let cleanInsets = layout.insets(options: [])
@ -69,7 +69,7 @@ final class GalleryFooterNode: ASDisplayNode {
}
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if !self.backgroundNode.frame.contains(point) {
return nil
}

View file

@ -0,0 +1,27 @@
import Foundation
public struct GalleryItemOriginData: Equatable {
public var title: String?
public var timestamp: Int32?
public init(title: String?, timestamp: Int32?) {
self.title = title
self.timestamp = timestamp
}
}
public struct GalleryItemIndexData: Equatable {
public var position: Int32
public var totalCount: Int32
public init(position: Int32, totalCount: Int32) {
self.position = position
self.totalCount = totalCount
}
}
public protocol GalleryItem {
func node() -> GalleryItemNode
func updateNode(node: GalleryItemNode)
func thumbnailItem() -> (Int64, GalleryThumbnailItem)?
}

View file

@ -12,7 +12,7 @@ public enum GalleryItemNodeNavigationStyle {
open class GalleryItemNode: ASDisplayNode {
private var _index: Int?
var index: Int {
public var index: Int {
get {
return self._index!
} set(value) {
@ -20,13 +20,13 @@ open class GalleryItemNode: ASDisplayNode {
}
}
var toggleControlsVisibility: () -> Void = { }
var dismiss: () -> Void = { }
var beginCustomDismiss: () -> Void = { }
var completeCustomDismiss: () -> Void = { }
var baseNavigationController: () -> NavigationController? = { return nil }
public var toggleControlsVisibility: () -> Void = { }
public var dismiss: () -> Void = { }
public var beginCustomDismiss: () -> Void = { }
public var completeCustomDismiss: () -> Void = { }
public var baseNavigationController: () -> NavigationController? = { return nil }
override init() {
override public init() {
super.init()
self.setViewBlock({

View file

@ -0,0 +1,7 @@
import Foundation
import AccountContext
public protocol GalleryItemTransitionNode: class {
func isAvailableForGalleryTransition() -> Bool
var decoration: UniversalVideoDecoration? { get }
}

View file

@ -5,10 +5,10 @@ import Display
import TelegramPresentationData
import CheckNode
final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDisplayNode {
public final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDisplayNode {
private var checkNode: CheckNode
init(theme: PresentationTheme) {
public init(theme: PresentationTheme) {
self.checkNode = CheckNode(strokeColor: theme.list.itemCheckColors.strokeColor, fillColor: theme.list.itemCheckColors.fillColor, foregroundColor: theme.list.itemCheckColors.foregroundColor, style: .navigation)
super.init()
@ -16,27 +16,27 @@ final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDis
self.addSubnode(self.checkNode)
}
var isHighlightable: Bool {
public var isHighlightable: Bool {
return false
}
var isChecked: Bool {
public var isChecked: Bool {
return self.checkNode.isChecked
}
func setIsChecked(_ isChecked: Bool, animated: Bool) {
public func setIsChecked(_ isChecked: Bool, animated: Bool) {
self.checkNode.setIsChecked(isChecked, animated: animated)
}
func addTarget(target: AnyObject?, action: Selector) {
public func addTarget(target: AnyObject?, action: Selector) {
self.checkNode.addTarget(target: target, action: action)
}
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
override public func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
return CGSize(width: 39.0, height: 39.0)
}
override func layout() {
override public func layout() {
super.layout()
let size = self.bounds.size

View file

@ -4,11 +4,11 @@ import AsyncDisplayKit
import Display
import LegacyComponents
final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCustomDisplayNode {
public final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCustomDisplayNode {
private var iconNode: ASImageNode
private var textNode: ImmediateTextNode
init(color: UIColor, title: String) {
public init(color: UIColor, title: String) {
self.iconNode = ASImageNode()
self.iconNode.alpha = 0.45
self.iconNode.image = TGComponentsImageNamed("PhotoPickerArrow")
@ -28,16 +28,16 @@ final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCusto
}
}
var isHighlightable: Bool {
public var isHighlightable: Bool {
return false
}
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
override public func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
let textSize = self.textNode.updateLayout(CGSize(width: constrainedSize.width - 50.0, height: constrainedSize.height))
return CGSize(width: textSize.width + 12.0, height: 30.0)
}
override func layout() {
override public func layout() {
super.layout()
if let image = self.iconNode.image {

View file

@ -5,7 +5,7 @@ import Display
import SwiftSignalKit
import Postbox
struct GalleryPagerInsertItem {
public struct GalleryPagerInsertItem {
public let index: Int
public let item: GalleryItem
public let previousIndex: Int?
@ -17,31 +17,38 @@ struct GalleryPagerInsertItem {
}
}
struct GalleryPagerUpdateItem {
let index: Int
let previousIndex: Int
let item: GalleryItem
public struct GalleryPagerUpdateItem {
public let index: Int
public let previousIndex: Int
public let item: GalleryItem
init(index: Int, previousIndex: Int, item: GalleryItem) {
public init(index: Int, previousIndex: Int, item: GalleryItem) {
self.index = index
self.previousIndex = previousIndex
self.item = item
}
}
struct GalleryPagerTransaction {
let deleteItems: [Int]
let insertItems: [GalleryPagerInsertItem]
let updateItems: [GalleryPagerUpdateItem]
let focusOnItem: Int?
public struct GalleryPagerTransaction {
public let deleteItems: [Int]
public let insertItems: [GalleryPagerInsertItem]
public let updateItems: [GalleryPagerUpdateItem]
public let focusOnItem: Int?
public init(deleteItems: [Int], insertItems: [GalleryPagerInsertItem], updateItems: [GalleryPagerUpdateItem], focusOnItem: Int?) {
self.deleteItems = deleteItems
self.insertItems = insertItems
self.updateItems = updateItems
self.focusOnItem = focusOnItem
}
}
final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
public final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
private let pageGap: CGFloat
private let scrollView: UIScrollView
private(set) var items: [GalleryItem] = []
public private(set) var items: [GalleryItem] = []
private var itemNodes: [GalleryItemNode] = []
private var ignoreDidScroll = false
private var ignoreCentralItemIndexUpdate = false
@ -55,16 +62,16 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
private var containerLayout: (ContainerViewLayout, CGFloat)?
var centralItemIndexUpdated: (Int?) -> Void = { _ in }
public var centralItemIndexUpdated: (Int?) -> Void = { _ in }
private var invalidatedItems = false
var centralItemIndexOffsetUpdated: (([GalleryItem]?, Int, CGFloat)?) -> Void = { _ in }
var toggleControlsVisibility: () -> Void = { }
var dismiss: () -> Void = { }
var beginCustomDismiss: () -> Void = { }
var completeCustomDismiss: () -> Void = { }
var baseNavigationController: () -> NavigationController? = { return nil }
public var centralItemIndexOffsetUpdated: (([GalleryItem]?, Int, CGFloat)?) -> Void = { _ in }
public var toggleControlsVisibility: () -> Void = { }
public var dismiss: () -> Void = { }
public var beginCustomDismiss: () -> Void = { }
public var completeCustomDismiss: () -> Void = { }
public var baseNavigationController: () -> NavigationController? = { return nil }
init(pageGap: CGFloat) {
public init(pageGap: CGFloat) {
self.pageGap = pageGap
self.scrollView = UIScrollView()
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
@ -85,7 +92,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
self.view.addSubview(self.scrollView)
}
var isScrollEnabled: Bool {
public var isScrollEnabled: Bool {
get {
return self.scrollView.isScrollEnabled
}
@ -94,7 +101,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
public func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
self.containerLayout = (layout, navigationBarHeight)
var centralPoint: CGPoint?
@ -129,14 +136,14 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func ready() -> Signal<Void, NoError> {
public func ready() -> Signal<Void, NoError> {
if let itemNode = self.centralItemNode() {
return itemNode.ready()
}
return .single(Void())
}
func centralItemNode() -> GalleryItemNode? {
public func centralItemNode() -> GalleryItemNode? {
if let centralItemIndex = self.centralItemIndex, let centralItemNode = self.visibleItemNode(at: centralItemIndex) {
return centralItemNode
} else {
@ -144,7 +151,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func replaceItems(_ items: [GalleryItem], centralItemIndex: Int?, keepFirst: Bool = false) {
public func replaceItems(_ items: [GalleryItem], centralItemIndex: Int?, keepFirst: Bool = false) {
var updateItems: [GalleryPagerUpdateItem] = []
let deleteItems: [Int] = []
var insertItems: [GalleryPagerInsertItem] = []
@ -158,7 +165,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
self.transaction(GalleryPagerTransaction(deleteItems: deleteItems, insertItems: insertItems, updateItems: updateItems, focusOnItem: centralItemIndex))
}
func transaction(_ transaction: GalleryPagerTransaction) {
public func transaction(_ transaction: GalleryPagerTransaction) {
for updatedItem in transaction.updateItems {
self.items[updatedItem.previousIndex] = updatedItem.item
if let itemNode = self.visibleItemNode(at: updatedItem.previousIndex) {
@ -397,23 +404,23 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate {
self.updateCentralIndexOffset(transition: .immediate)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !self.ignoreDidScroll {
self.updateItemNodes(transition: .immediate)
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
self.ensureItemsLoaded(force: false)
}
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
self.ensureItemsLoaded(force: true)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
self.ensureItemsLoaded(force: true)
}

View file

@ -8,7 +8,7 @@ private let itemBaseSize = CGSize(width: 23.0, height: 42.0)
private let spacing: CGFloat = 2.0
private let maxWidth: CGFloat = 75.0
protocol GalleryThumbnailItem {
public protocol GalleryThumbnailItem {
func isEqual(to: GalleryThumbnailItem) -> Bool
var image: (Signal<(TransformImageArguments) -> DrawingContext?, NoError>, CGSize) { get }
}
@ -48,12 +48,12 @@ private final class GalleryThumbnailItemNode: ASDisplayNode {
}
}
final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
let groupId: Int64
public final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
public let groupId: Int64
private let scrollNode: ASScrollNode
private(set) var items: [GalleryThumbnailItem] = []
private(set) var indexes: [Int] = []
public private(set) var items: [GalleryThumbnailItem] = []
public private(set) var indexes: [Int] = []
private var itemNodes: [GalleryThumbnailItemNode] = []
private var centralIndexAndProgress: (Int, CGFloat?)?
private var currentLayout: CGSize?
@ -62,7 +62,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
public var itemChanged: ((Int) -> Void)?
init(groupId: Int64) {
public init(groupId: Int64) {
self.groupId = groupId
self.scrollNode = ASScrollNode()
@ -86,7 +86,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func updateItems(_ items: [GalleryThumbnailItem], indexes: [Int], centralIndex: Int, progress: CGFloat) {
public func updateItems(_ items: [GalleryThumbnailItem], indexes: [Int], centralIndex: Int, progress: CGFloat) {
self.indexes = indexes
var items: [GalleryThumbnailItem] = items.count <= 1 ? [] : items
var updated = false
@ -103,7 +103,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
if updated {
var itemNodes: [GalleryThumbnailItemNode] = []
for item in items {
if let index = self.items.index(where: { $0.isEqual(to: item) }) {
if let index = self.items.firstIndex(where: { $0.isEqual(to: item) }) {
itemNodes.append(self.itemNodes[index])
} else {
itemNodes.append(GalleryThumbnailItemNode(item: item))
@ -129,14 +129,14 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func updateCentralIndexAndProgress(centralIndex: Int, progress: CGFloat, transition: ContainedViewLayoutTransition = .immediate) {
public func updateCentralIndexAndProgress(centralIndex: Int, progress: CGFloat, transition: ContainedViewLayoutTransition = .immediate) {
self.centralIndexAndProgress = (centralIndex, progress)
if let size = self.currentLayout {
self.updateLayout(size: size, transition: transition)
}
}
func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
self.currentLayout = size
if let (centralIndex, progress) = self.centralIndexAndProgress {
self.updateLayout(size: size, centralIndex: centralIndex, progress: progress, transition: transition)
@ -148,7 +148,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
return CGPoint(x: -contentInset.left + (CGFloat(index) + progress) * (itemBaseSize.width + spacing), y: 0.0)
}
func updateLayout(size: CGSize, centralIndex: Int, progress: CGFloat?, transition: ContainedViewLayoutTransition) {
public func updateLayout(size: CGSize, centralIndex: Int, progress: CGFloat?, transition: ContainedViewLayoutTransition) {
self.currentLayout = size
self.scrollNode.frame = CGRect(origin: CGPoint(), size: size)
let centralSpacing: CGFloat = 8.0
@ -231,7 +231,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func animateOut(toRight: Bool) {
public func animateOut(toRight: Bool) {
let collection = toRight ? self.itemNodes : self.itemNodes.reversed()
let offset: CGFloat = toRight ? -15.0 : 15.0
var delay: Double = 0.0
@ -242,7 +242,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard let currentLayout = self.currentLayout else {
return
}
@ -267,7 +267,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
guard let currentLayout = self.currentLayout else {
return
}
@ -283,7 +283,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate {
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
guard let currentLayout = self.currentLayout, !scrollView.isTracking else {
return
}

View file

@ -0,0 +1,19 @@
//
// GalleryUI.h
// GalleryUI
//
// Created by Peter on 8/11/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for GalleryUI.
FOUNDATION_EXPORT double GalleryUIVersionNumber;
//! Project version string for GalleryUI.
FOUNDATION_EXPORT const unsigned char GalleryUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <GalleryUI/PublicHeader.h>

View file

@ -7,20 +7,20 @@ import UniversalMediaPlayer
import AccountContext
import PhotoResources
final class GalleryVideoDecoration: UniversalVideoDecoration {
let backgroundNode: ASDisplayNode? = nil
let contentContainerNode: ASDisplayNode
let foregroundNode: ASDisplayNode? = nil
public final class GalleryVideoDecoration: UniversalVideoDecoration {
public let backgroundNode: ASDisplayNode? = nil
public let contentContainerNode: ASDisplayNode
public let foregroundNode: ASDisplayNode? = nil
private var contentNode: (ASDisplayNode & UniversalVideoContentNode)?
private var validLayoutSize: CGSize?
init() {
public init() {
self.contentContainerNode = ASDisplayNode()
}
func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) {
public func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) {
if self.contentNode !== contentNode {
let previous = self.contentNode
self.contentNode = contentNode
@ -43,7 +43,7 @@ final class GalleryVideoDecoration: UniversalVideoDecoration {
}
}
func updateCorners(_ corners: ImageCorners) {
public func updateCorners(_ corners: ImageCorners) {
self.contentContainerNode.clipsToBounds = true
if isRoundEqualCorners(corners) {
self.contentContainerNode.cornerRadius = corners.topLeft.radius
@ -70,7 +70,7 @@ final class GalleryVideoDecoration: UniversalVideoDecoration {
}
}
func updateClippingFrame(_ frame: CGRect, completion: (() -> Void)?) {
public func updateClippingFrame(_ frame: CGRect, completion: (() -> Void)?) {
self.contentContainerNode.layer.animate(from: NSValue(cgRect: self.contentContainerNode.bounds), to: NSValue(cgRect: frame), keyPath: "bounds", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.25, removeOnCompletion: false, completion: { _ in
})
@ -89,10 +89,10 @@ final class GalleryVideoDecoration: UniversalVideoDecoration {
}
}
func updateContentNodeSnapshot(_ snapshot: UIView?) {
public func updateContentNodeSnapshot(_ snapshot: UIView?) {
}
func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
self.validLayoutSize = size
let bounds = CGRect(origin: CGPoint(), size: size)
@ -112,9 +112,9 @@ final class GalleryVideoDecoration: UniversalVideoDecoration {
}
}
func setStatus(_ status: Signal<MediaPlayerStatus?, NoError>) {
public func setStatus(_ status: Signal<MediaPlayerStatus?, NoError>) {
}
func tap() {
public func tap() {
}
}

View file

@ -9,13 +9,14 @@ import TelegramPresentationData
import UniversalMediaPlayer
import AccountContext
import RadialStatusNode
import TelegramUniversalVideoContent
enum UniversalVideoGalleryItemContentInfo {
public enum UniversalVideoGalleryItemContentInfo {
case message(Message)
case webPage(TelegramMediaWebpage, Media)
}
class UniversalVideoGalleryItem: GalleryItem {
public class UniversalVideoGalleryItem: GalleryItem {
let context: AccountContext
let presentationData: PresentationData
let content: UniversalVideoContent
@ -32,7 +33,7 @@ class UniversalVideoGalleryItem: GalleryItem {
let performAction: (GalleryControllerInteractionTapAction) -> Void
let openActionOptions: (GalleryControllerInteractionTapAction) -> Void
init(context: AccountContext, presentationData: PresentationData, content: UniversalVideoContent, originData: GalleryItemOriginData?, indexData: GalleryItemIndexData?, contentInfo: UniversalVideoGalleryItemContentInfo?, caption: NSAttributedString, credit: NSAttributedString? = nil, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void) {
public init(context: AccountContext, presentationData: PresentationData, content: UniversalVideoContent, originData: GalleryItemOriginData?, indexData: GalleryItemIndexData?, contentInfo: UniversalVideoGalleryItemContentInfo?, caption: NSAttributedString, credit: NSAttributedString? = nil, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void) {
self.context = context
self.presentationData = presentationData
self.content = content
@ -50,7 +51,7 @@ class UniversalVideoGalleryItem: GalleryItem {
self.openActionOptions = openActionOptions
}
func node() -> GalleryItemNode {
public func node() -> GalleryItemNode {
let node = UniversalVideoGalleryItemNode(context: self.context, presentationData: self.presentationData, performAction: self.performAction, openActionOptions: self.openActionOptions)
if let indexData = self.indexData {
@ -62,7 +63,7 @@ class UniversalVideoGalleryItem: GalleryItem {
return node
}
func updateNode(node: GalleryItemNode) {
public func updateNode(node: GalleryItemNode) {
if let node = node as? UniversalVideoGalleryItemNode {
if let indexData = self.indexData {
node._title.set(.single("\(indexData.position + 1) \(self.presentationData.strings.Common_of) \(indexData.totalCount)"))
@ -72,7 +73,7 @@ class UniversalVideoGalleryItem: GalleryItem {
}
}
func thumbnailItem() -> (Int64, GalleryThumbnailItem)? {
public func thumbnailItem() -> (Int64, GalleryThumbnailItem)? {
guard let contentInfo = self.contentInfo else {
return nil
}
@ -879,7 +880,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
let fromTransform: CATransform3D
let toTransform: CATransform3D
if let interactiveMediaNode = node.0 as? ChatMessageInteractiveMediaNode, interactiveMediaNode.automaticPlayback ?? false, videoNode.hasAttachedContext {
if let interactiveMediaNode = node.0 as? GalleryItemTransitionNode, interactiveMediaNode.isAvailableForGalleryTransition(), videoNode.hasAttachedContext {
copyView.removeFromSuperview()
let previousFrame = videoNode.frame
@ -896,7 +897,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
let targetScale = max(transformedFrame.size.width / videoNode.layer.bounds.size.width, transformedFrame.size.height / videoNode.layer.bounds.size.height)
videoNode.backgroundColor = .clear
if let bubbleDecoration = interactiveMediaNode.videoNodeDecoration, let decoration = videoNode.decoration as? GalleryVideoDecoration {
if let bubbleDecoration = interactiveMediaNode.decoration as? ChatBubbleVideoDecoration, let decoration = videoNode.decoration as? GalleryVideoDecoration {
transformedSuperFrame = transformedSuperFrame.offsetBy(dx: bubbleDecoration.corners.extendedEdges.right / 2.0 - bubbleDecoration.corners.extendedEdges.left / 2.0, dy: 0.0)
if let item = self.item {
let size = item.content.dimensions.aspectFilled(bubbleDecoration.contentContainerNode.frame.size)
@ -921,7 +922,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
videoNode.continuePlayingWithoutSound()
}
}
} else if let _ = node.0 as? InstantPagePlayableVideoNode, videoNode.hasAttachedContext {
} else if let _ = node.0 as? GalleryItemTransitionNode, videoNode.hasAttachedContext {
copyView.removeFromSuperview()
let previousFrame = videoNode.frame

View file

@ -8,6 +8,7 @@ import SwiftSignalKit
import TelegramPresentationData
import AccountContext
import RadialStatusNode
import ScreenCaptureDetection
private func galleryMediaForMedia(media: Media) -> Media? {
if let media = media as? TelegramMediaImage {

View file

@ -3,15 +3,15 @@ import UIKit
import Display
import AsyncDisplayKit
class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
let scrollNode: ASScrollNode
open class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
public let scrollNode: ASScrollNode
private var containerLayout: ContainerViewLayout?
private var ignoreZoom = false
private var ignoreZoomTransition: ContainedViewLayoutTransition?
var zoomableContent: (CGSize, ASDisplayNode)? {
public var zoomableContent: (CGSize, ASDisplayNode)? {
didSet {
if oldValue?.1 !== self.zoomableContent?.1 {
if let node = oldValue?.1 {
@ -26,7 +26,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
}
}
override init() {
override public init() {
self.scrollNode = ASScrollNode()
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
self.scrollNode.view.contentInsetAdjustmentBehavior = .never
@ -51,7 +51,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
self.addSubnode(self.scrollNode)
}
@objc func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) {
@objc open func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) {
if recognizer.state == .ended {
if let (gesture, location) = recognizer.lastRecognizedGestureAndLocation {
switch gesture {
@ -82,7 +82,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
}
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
override open func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition)
var shouldResetContents = false
@ -194,11 +194,11 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
}
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
open func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return self.zoomableContent?.1.view
}
func scrollViewDidZoom(_ scrollView: UIScrollView) {
open func scrollViewDidZoom(_ scrollView: UIScrollView) {
if !self.ignoreZoom {
self.centerScrollViewContents(transition: self.ignoreZoomTransition ?? .immediate)
}
@ -209,7 +209,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate {
}
}
override func contentSize() -> CGSize? {
override open func contentSize() -> CGSize? {
if let (_, contentNode) = self.zoomableContent {
let size = contentNode.view.convert(contentNode.bounds, to: self.view).size
return CGSize(width: floor(size.width), height: floor(size.height))

View file

@ -0,0 +1,591 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C18E22FFA17D00FAB518 /* GameUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C18C22FFA17D00FAB518 /* GameUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C19B23001E2700FAB518 /* GameControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19823001E2700FAB518 /* GameControllerNode.swift */; };
D0C9C19C23001E2700FAB518 /* GameControllerTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */; };
D0C9C19D23001E2700FAB518 /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19A23001E2700FAB518 /* GameController.swift */; };
D0C9C1A023001E5A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C19F23001E5A00FAB518 /* Foundation.framework */; };
D0C9C1A223001EFD00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A123001EFD00FAB518 /* UIKit.framework */; };
D0C9C1A423001F0000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A323001F0000FAB518 /* Display.framework */; };
D0C9C1A623001F0400FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */; };
D0C9C1A823001F0800FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A723001F0800FAB518 /* TelegramCore.framework */; };
D0C9C1AA23001F0D00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */; };
D0C9C1AC23001F1300FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AB23001F1300FAB518 /* Postbox.framework */; };
D0C9C1AE23001F1900FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */; };
D0C9C1B023001F1D00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */; };
D0C9C1B223001F2500FAB518 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1B123001F2500FAB518 /* WebKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
D0C9C1B423001F3D00FAB518 /* ShareController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1B323001F3D00FAB518 /* ShareController.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C18922FFA17D00FAB518 /* GameUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GameUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C18C22FFA17D00FAB518 /* GameUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GameUI.h; sourceTree = "<group>"; };
D0C9C18D22FFA17D00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C19823001E2700FAB518 /* GameControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerNode.swift; sourceTree = "<group>"; };
D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerTitleView.swift; sourceTree = "<group>"; };
D0C9C19A23001E2700FAB518 /* GameController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = "<group>"; };
D0C9C19F23001E5A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C1A123001EFD00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C1A323001F0000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1A723001F0800FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1AB23001F1300FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1B123001F2500FAB518 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
D0C9C1B323001F3D00FAB518 /* ShareController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ShareController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C18622FFA17D00FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C1B423001F3D00FAB518 /* ShareController.framework in Frameworks */,
D0C9C1B223001F2500FAB518 /* WebKit.framework in Frameworks */,
D0C9C1B023001F1D00FAB518 /* AccountContext.framework in Frameworks */,
D0C9C1AE23001F1900FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C1AC23001F1300FAB518 /* Postbox.framework in Frameworks */,
D0C9C1AA23001F0D00FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C1A823001F0800FAB518 /* TelegramCore.framework in Frameworks */,
D0C9C1A623001F0400FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C1A423001F0000FAB518 /* Display.framework in Frameworks */,
D0C9C1A223001EFD00FAB518 /* UIKit.framework in Frameworks */,
D0C9C1A023001E5A00FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C17F22FFA17D00FAB518 = {
isa = PBXGroup;
children = (
D0C9C18D22FFA17D00FAB518 /* Info.plist */,
D0C9C18B22FFA17D00FAB518 /* Sources */,
D0C9C18A22FFA17D00FAB518 /* Products */,
D0C9C19E23001E5A00FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C18A22FFA17D00FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C18922FFA17D00FAB518 /* GameUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C18B22FFA17D00FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C19A23001E2700FAB518 /* GameController.swift */,
D0C9C19823001E2700FAB518 /* GameControllerNode.swift */,
D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */,
D0C9C18C22FFA17D00FAB518 /* GameUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C19E23001E5A00FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C1B323001F3D00FAB518 /* ShareController.framework */,
D0C9C1B123001F2500FAB518 /* WebKit.framework */,
D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */,
D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */,
D0C9C1AB23001F1300FAB518 /* Postbox.framework */,
D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */,
D0C9C1A723001F0800FAB518 /* TelegramCore.framework */,
D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */,
D0C9C1A323001F0000FAB518 /* Display.framework */,
D0C9C1A123001EFD00FAB518 /* UIKit.framework */,
D0C9C19F23001E5A00FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C18422FFA17D00FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C18E22FFA17D00FAB518 /* GameUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C18822FFA17D00FAB518 /* GameUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C19122FFA17D00FAB518 /* Build configuration list for PBXNativeTarget "GameUI" */;
buildPhases = (
D0C9C18422FFA17D00FAB518 /* Headers */,
D0C9C18522FFA17D00FAB518 /* Sources */,
D0C9C18622FFA17D00FAB518 /* Frameworks */,
D0C9C18722FFA17D00FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = GameUI;
productName = GameUI;
productReference = D0C9C18922FFA17D00FAB518 /* GameUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C18022FFA17D00FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C18822FFA17D00FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C18322FFA17D00FAB518 /* Build configuration list for PBXProject "GameUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C17F22FFA17D00FAB518;
productRefGroup = D0C9C18A22FFA17D00FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C18822FFA17D00FAB518 /* GameUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C18722FFA17D00FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C18522FFA17D00FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C19B23001E2700FAB518 /* GameControllerNode.swift in Sources */,
D0C9C19D23001E2700FAB518 /* GameController.swift in Sources */,
D0C9C19C23001E2700FAB518 /* GameControllerTitleView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C18F22FFA17D00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C19022FFA17D00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C19222FFA17D00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C19322FFA17D00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C19423001D9F00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C19523001D9F00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C19623001DBE00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C19723001DBE00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C18322FFA17D00FAB518 /* Build configuration list for PBXProject "GameUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C18F22FFA17D00FAB518 /* DebugAppStoreLLC */,
D0C9C19423001D9F00FAB518 /* DebugHockeyapp */,
D0C9C19022FFA17D00FAB518 /* ReleaseAppStoreLLC */,
D0C9C19623001DBE00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C19122FFA17D00FAB518 /* Build configuration list for PBXNativeTarget "GameUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C19222FFA17D00FAB518 /* DebugAppStoreLLC */,
D0C9C19523001D9F00FAB518 /* DebugHockeyapp */,
D0C9C19322FFA17D00FAB518 /* ReleaseAppStoreLLC */,
D0C9C19723001DBE00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C18022FFA17D00FAB518 /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -8,7 +8,7 @@ import Postbox
import TelegramPresentationData
import AccountContext
final class GameController: ViewController {
public final class GameController: ViewController {
private var controllerNode: GameControllerNode {
return self.displayNode as! GameControllerNode
}
@ -19,7 +19,7 @@ final class GameController: ViewController {
private var presentationData: PresentationData
init(context: AccountContext, url: String, message: Message) {
public init(context: AccountContext, url: String, message: Message) {
self.context = context
self.url = url
self.message = message
@ -53,7 +53,7 @@ final class GameController: ViewController {
}
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@ -61,38 +61,37 @@ final class GameController: ViewController {
assert(true)
}
@objc func closePressed() {
@objc private func closePressed() {
self.dismiss()
}
@objc func sharePressed() {
@objc private func sharePressed() {
self.controllerNode.shareWithoutScore()
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
self.displayNode = GameControllerNode(context: self.context, presentationData: self.presentationData, url: self.url, present: { [weak self] c, a in
self?.present(c, in: .window(.root), with: a)
}, message: self.message)
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
self.controllerNode.animateOut(completion: { [weak self] in
self?.presentingViewController?.dismiss(animated: false, completion: nil)
completion?()
})
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
}
override var presentationController: UIPresentationController? {
override public var presentationController: UIPresentationController? {
get {
return nil
} set(value) {
}
}
}

View file

@ -5,7 +5,6 @@ import Display
import Postbox
import TelegramCore
import SwiftSignalKit
import LegacyComponents
import TelegramPresentationData
final class GameControllerTitleView: UIView {

View file

@ -0,0 +1,19 @@
//
// GameUI.h
// GameUI
//
// Created by Peter on 8/11/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for GameUI.
FOUNDATION_EXPORT double GameUIVersionNumber;
//! Project version string for GameUI.
FOUNDATION_EXPORT const unsigned char GameUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <GameUI/PublicHeader.h>

View file

@ -0,0 +1,551 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C4AB2300E50200FAB518 /* ImageCompression.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C4A92300E50200FAB518 /* ImageCompression.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C4B62300E57200FAB518 /* ImageCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4B52300E57200FAB518 /* ImageCompression.swift */; };
D0C9C4B92300E59B00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4B82300E59A00FAB518 /* Foundation.framework */; };
D0C9C4BB2300E59C00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BA2300E59C00FAB518 /* UIKit.framework */; };
D0C9C4BD2300E5A000FAB518 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C4A62300E50200FAB518 /* ImageCompression.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImageCompression.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4A92300E50200FAB518 /* ImageCompression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageCompression.h; sourceTree = "<group>"; };
D0C9C4AA2300E50200FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C4B52300E57200FAB518 /* ImageCompression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCompression.swift; sourceTree = "<group>"; };
D0C9C4B82300E59A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C4BA2300E59C00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C4A32300E50200FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4BD2300E5A000FAB518 /* AVFoundation.framework in Frameworks */,
D0C9C4BB2300E59C00FAB518 /* UIKit.framework in Frameworks */,
D0C9C4B92300E59B00FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C49C2300E50200FAB518 = {
isa = PBXGroup;
children = (
D0C9C4AA2300E50200FAB518 /* Info.plist */,
D0C9C4A82300E50200FAB518 /* Sources */,
D0C9C4A72300E50200FAB518 /* Products */,
D0C9C4B72300E59900FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C4A72300E50200FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C4A62300E50200FAB518 /* ImageCompression.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C4A82300E50200FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C4B52300E57200FAB518 /* ImageCompression.swift */,
D0C9C4A92300E50200FAB518 /* ImageCompression.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C4B72300E59900FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */,
D0C9C4BA2300E59C00FAB518 /* UIKit.framework */,
D0C9C4B82300E59A00FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C4A12300E50200FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4AB2300E50200FAB518 /* ImageCompression.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C4A52300E50200FAB518 /* ImageCompression */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C4AE2300E50200FAB518 /* Build configuration list for PBXNativeTarget "ImageCompression" */;
buildPhases = (
D0C9C4A12300E50200FAB518 /* Headers */,
D0C9C4A22300E50200FAB518 /* Sources */,
D0C9C4A32300E50200FAB518 /* Frameworks */,
D0C9C4A42300E50200FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = ImageCompression;
productName = ImageCompression;
productReference = D0C9C4A62300E50200FAB518 /* ImageCompression.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C49D2300E50200FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C4A52300E50200FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C4A02300E50200FAB518 /* Build configuration list for PBXProject "ImageCompression_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C49C2300E50200FAB518;
productRefGroup = D0C9C4A72300E50200FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C4A52300E50200FAB518 /* ImageCompression */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C4A42300E50200FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C4A22300E50200FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4B62300E57200FAB518 /* ImageCompression.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C4AC2300E50200FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C4AD2300E50200FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C4AF2300E50200FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C4B02300E50200FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C4B12300E53B00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C4B22300E53B00FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C4B32300E54900FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C4B42300E54900FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C4A02300E50200FAB518 /* Build configuration list for PBXProject "ImageCompression_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4AC2300E50200FAB518 /* DebugAppStoreLLC */,
D0C9C4B12300E53B00FAB518 /* DebugHockeyapp */,
D0C9C4AD2300E50200FAB518 /* ReleaseAppStoreLLC */,
D0C9C4B32300E54900FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C4AE2300E50200FAB518 /* Build configuration list for PBXNativeTarget "ImageCompression" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4AF2300E50200FAB518 /* DebugAppStoreLLC */,
D0C9C4B22300E53B00FAB518 /* DebugHockeyapp */,
D0C9C4B02300E50200FAB518 /* ReleaseAppStoreLLC */,
D0C9C4B42300E54900FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C49D2300E50200FAB518 /* Project object */;
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,19 @@
//
// ImageCompression.h
// ImageCompression
//
// Created by Peter on 8/12/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for ImageCompression.
FOUNDATION_EXPORT double ImageCompressionVersionNumber;
//! Project version string for ImageCompression.
FOUNDATION_EXPORT const unsigned char ImageCompressionVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <ImageCompression/PublicHeader.h>

View file

@ -1,13 +1,8 @@
import Foundation
import AVFoundation
import UIKit
import Display
import TelegramCore
import Postbox
import TelegramUIPrivateModule
func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? {
public func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? {
let data = NSMutableData()
guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, "public.jpeg" as CFString, 1, nil) else {
return nil
@ -30,7 +25,7 @@ func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? {
}
@available(iOSApplicationExtension 11.0, iOS 11.0, *)
func compressImage(_ image: UIImage, quality: Float) -> Data? {
public func compressImage(_ image: UIImage, quality: Float) -> Data? {
let data = NSMutableData()
guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, AVFileType.heic as CFString, 1, nil) else {
return nil

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,627 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C45F2300E24D00FAB518 /* LegacyUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C45D2300E24D00FAB518 /* LegacyUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C46C2300E2D700FAB518 /* LegacyEmptyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */; };
D0C9C46D2300E2D700FAB518 /* LegacyControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */; };
D0C9C46E2300E2D700FAB518 /* LegacyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C46B2300E2D700FAB518 /* LegacyController.swift */; };
D0C9C4712300E2E800FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4702300E2E800FAB518 /* Foundation.framework */; };
D0C9C4732300E2EC00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4722300E2EC00FAB518 /* UIKit.framework */; };
D0C9C4752300E2F100FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4742300E2F100FAB518 /* Display.framework */; };
D0C9C4772300E2F400FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */; };
D0C9C4792300E2F900FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */; };
D0C9C47B2300E2FD00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */; };
D0C9C4812300E35400FAB518 /* TelegramInitializeLegacyComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */; };
D0C9C4832300E35E00FAB518 /* MtProtoKitDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */; };
D0C9C4852300E36A00FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4842300E36A00FAB518 /* Postbox.framework */; };
D0C9C4872300E36F00FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4862300E36F00FAB518 /* TelegramCore.framework */; };
D0C9C4892300E37900FAB518 /* DeviceAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4882300E37900FAB518 /* DeviceAccess.framework */; };
D0C9C48B2300E37F00FAB518 /* TelegramAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */; };
D0C9C48D2300E38700FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C48C2300E38700FAB518 /* AccountContext.framework */; };
D0C9C48F2300E3B500FAB518 /* LegacyComponentsStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */; };
D0C9C4922300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */; };
D0C9C4932300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */; };
D0C9C4952300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */; };
D0C9C4972300E3FC00FAB518 /* LegacyImageDownloadActor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */; };
D0C9C4992300E42D00FAB518 /* LegacyMediaLocations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */; };
D0C9C49B2300E4C300FAB518 /* LegacyNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LegacyUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C45D2300E24D00FAB518 /* LegacyUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LegacyUI.h; sourceTree = "<group>"; };
D0C9C45E2300E24D00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyEmptyController.swift; sourceTree = "<group>"; };
D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyControllerNode.swift; sourceTree = "<group>"; };
D0C9C46B2300E2D700FAB518 /* LegacyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyController.swift; sourceTree = "<group>"; };
D0C9C4702300E2E800FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C4722300E2EC00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C4742300E2F100FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramInitializeLegacyComponents.swift; sourceTree = "<group>"; };
D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MtProtoKitDynamic.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4842300E36A00FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4862300E36F00FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4882300E37900FAB518 /* DeviceAccess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DeviceAccess.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C48C2300E38700FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyComponentsStickers.swift; sourceTree = "<group>"; };
D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyHTTPOperationImpl.swift; sourceTree = "<group>"; };
D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyPeerAvatarPlaceholderDataSource.swift; sourceTree = "<group>"; };
D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyLocationVenueIconDataSource.swift; sourceTree = "<group>"; };
D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyImageDownloadActor.swift; sourceTree = "<group>"; };
D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyMediaLocations.swift; sourceTree = "<group>"; };
D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyNavigationController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C4572300E24D00FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C48D2300E38700FAB518 /* AccountContext.framework in Frameworks */,
D0C9C48B2300E37F00FAB518 /* TelegramAudio.framework in Frameworks */,
D0C9C4892300E37900FAB518 /* DeviceAccess.framework in Frameworks */,
D0C9C4872300E36F00FAB518 /* TelegramCore.framework in Frameworks */,
D0C9C4852300E36A00FAB518 /* Postbox.framework in Frameworks */,
D0C9C4832300E35E00FAB518 /* MtProtoKitDynamic.framework in Frameworks */,
D0C9C47B2300E2FD00FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C4792300E2F900FAB518 /* LegacyComponents.framework in Frameworks */,
D0C9C4772300E2F400FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C4752300E2F100FAB518 /* Display.framework in Frameworks */,
D0C9C4732300E2EC00FAB518 /* UIKit.framework in Frameworks */,
D0C9C4712300E2E800FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C4502300E24D00FAB518 = {
isa = PBXGroup;
children = (
D0C9C45E2300E24D00FAB518 /* Info.plist */,
D0C9C45C2300E24D00FAB518 /* Sources */,
D0C9C45B2300E24D00FAB518 /* Products */,
D0C9C46F2300E2E800FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C45B2300E24D00FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C45C2300E24D00FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */,
D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */,
D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */,
D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */,
D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */,
D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */,
D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */,
D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */,
D0C9C46B2300E2D700FAB518 /* LegacyController.swift */,
D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */,
D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */,
D0C9C45D2300E24D00FAB518 /* LegacyUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C46F2300E2E800FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C48C2300E38700FAB518 /* AccountContext.framework */,
D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */,
D0C9C4882300E37900FAB518 /* DeviceAccess.framework */,
D0C9C4862300E36F00FAB518 /* TelegramCore.framework */,
D0C9C4842300E36A00FAB518 /* Postbox.framework */,
D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */,
D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */,
D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */,
D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */,
D0C9C4742300E2F100FAB518 /* Display.framework */,
D0C9C4722300E2EC00FAB518 /* UIKit.framework */,
D0C9C4702300E2E800FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C4552300E24D00FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C45F2300E24D00FAB518 /* LegacyUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C4592300E24D00FAB518 /* LegacyUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C4622300E24D00FAB518 /* Build configuration list for PBXNativeTarget "LegacyUI" */;
buildPhases = (
D0C9C4552300E24D00FAB518 /* Headers */,
D0C9C4562300E24D00FAB518 /* Sources */,
D0C9C4572300E24D00FAB518 /* Frameworks */,
D0C9C4582300E24D00FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = LegacyUI;
productName = LegacyUI;
productReference = D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C4512300E24D00FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C4592300E24D00FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C4542300E24D00FAB518 /* Build configuration list for PBXProject "LegacyUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C4502300E24D00FAB518;
productRefGroup = D0C9C45B2300E24D00FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C4592300E24D00FAB518 /* LegacyUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C4582300E24D00FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C4562300E24D00FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C49B2300E4C300FAB518 /* LegacyNavigationController.swift in Sources */,
D0C9C4992300E42D00FAB518 /* LegacyMediaLocations.swift in Sources */,
D0C9C4972300E3FC00FAB518 /* LegacyImageDownloadActor.swift in Sources */,
D0C9C4932300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */,
D0C9C46D2300E2D700FAB518 /* LegacyControllerNode.swift in Sources */,
D0C9C4812300E35400FAB518 /* TelegramInitializeLegacyComponents.swift in Sources */,
D0C9C46C2300E2D700FAB518 /* LegacyEmptyController.swift in Sources */,
D0C9C46E2300E2D700FAB518 /* LegacyController.swift in Sources */,
D0C9C4922300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift in Sources */,
D0C9C48F2300E3B500FAB518 /* LegacyComponentsStickers.swift in Sources */,
D0C9C4952300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C4602300E24D00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C4612300E24D00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C4632300E24D00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C4642300E24D00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C4652300E28100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C4662300E28100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C4672300E28D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C4682300E28D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C4542300E24D00FAB518 /* Build configuration list for PBXProject "LegacyUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4602300E24D00FAB518 /* DebugAppStoreLLC */,
D0C9C4652300E28100FAB518 /* DebugHockeyapp */,
D0C9C4612300E24D00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4672300E28D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C4622300E24D00FAB518 /* Build configuration list for PBXNativeTarget "LegacyUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4632300E24D00FAB518 /* DebugAppStoreLLC */,
D0C9C4662300E28100FAB518 /* DebugHockeyapp */,
D0C9C4642300E24D00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4682300E28D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C4512300E24D00FAB518 /* Project object */;
}

View file

@ -89,11 +89,11 @@ private final class LegacyComponentsOverlayWindowManagerImpl: NSObject, LegacyCo
}
}
final class LegacyControllerContext: NSObject, LegacyComponentsContext {
private(set) weak var controller: ViewController?
public final class LegacyControllerContext: NSObject, LegacyComponentsContext {
public private(set) weak var controller: ViewController?
private let theme: PresentationTheme?
init(controller: ViewController?, theme: PresentationTheme?) {
public init(controller: ViewController?, theme: PresentationTheme?) {
self.controller = controller
self.theme = theme
@ -234,18 +234,18 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext {
}
func makeOverlayWindowManager() -> LegacyComponentsOverlayWindowManager! {
public func makeOverlayWindowManager() -> LegacyComponentsOverlayWindowManager! {
return LegacyComponentsOverlayWindowManagerImpl(parentController: self.controller, theme: self.theme)
}
func applicationStatusBarAlpha() -> CGFloat {
public func applicationStatusBarAlpha() -> CGFloat {
if let controller = self.controller {
return controller.statusBar.alpha
}
return 0.0
}
func setApplicationStatusBarAlpha(_ alpha: CGFloat) {
public func setApplicationStatusBarAlpha(_ alpha: CGFloat) {
if let controller = self.controller {
controller.statusBar.alpha = alpha
self.updateDeferScreenEdgeGestures()
@ -262,18 +262,18 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext {
}
}
func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, delay: TimeInterval, duration: TimeInterval, completion: (() -> Void)!) {
public func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, delay: TimeInterval, duration: TimeInterval, completion: (() -> Void)!) {
completion?()
}
func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, duration: TimeInterval, completion: (() -> Void)!) {
public func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, duration: TimeInterval, completion: (() -> Void)!) {
self.animateApplicationStatusBarAppearance(statusBarAnimation, delay: 0.0, duration: duration, completion: completion)
}
func animateApplicationStatusBarStyleTransition(withDuration duration: TimeInterval) {
public func animateApplicationStatusBarStyleTransition(withDuration duration: TimeInterval) {
}
func safeAreaInset() -> UIEdgeInsets {
public func safeAreaInset() -> UIEdgeInsets {
if let controller = self.controller as? LegacyController, let validLayout = controller.validLayout {
var safeInsets = validLayout.safeInsets
if safeInsets.top.isEqual(to: 44.0) {
@ -287,7 +287,7 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext {
return UIEdgeInsets()
}
func prefersLightStatusBar() -> Bool {
public func prefersLightStatusBar() -> Bool {
if let controller = self.controller {
switch controller.statusBar.statusBarStyle {
case .Black:
@ -303,7 +303,7 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext {
}
}
public class LegacyController: ViewController, PresentableController {
open class LegacyController: ViewController, PresentableController {
public private(set) var legacyController: UIViewController!
private let presentation: LegacyControllerPresentation
@ -318,17 +318,17 @@ public class LegacyController: ViewController, PresentableController {
fileprivate var validLayout: ContainerViewLayout?
var controllerLoaded: (() -> Void)?
public var controllerLoaded: (() -> Void)?
public var presentationCompleted: (() -> Void)?
private let sizeClass: SVariable = SVariable()
var enableSizeClassSignal: Bool = false
var sizeClassSignal: SSignal {
public var enableSizeClassSignal: Bool = false
public var sizeClassSignal: SSignal {
return self.sizeClass.signal()!
}
private var enableContainerLayoutUpdates = false
var disposables = DisposableSet()
public var disposables = DisposableSet()
public init(presentation: LegacyControllerPresentation, theme: PresentationTheme? = nil, strings: PresentationStrings? = nil, initialLayout: ContainerViewLayout? = nil) {
self.sizeClass.set(SSignal.single(UIUserInterfaceSizeClass.compact.rawValue as NSNumber))
@ -368,12 +368,12 @@ public class LegacyController: ViewController, PresentableController {
}
}
override public func loadDisplayNode() {
override open func loadDisplayNode() {
self.displayNode = LegacyControllerNode()
self.displayNodeDidLoad()
}
override public func viewWillAppear(_ animated: Bool) {
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if self.ignoreAppearanceMethodInvocations() {
@ -398,7 +398,7 @@ public class LegacyController: ViewController, PresentableController {
self.legacyController.viewWillAppear(animated && passControllerAppearanceAnimated(in: true, presentation: self.presentation))
}
override public func viewWillDisappear(_ animated: Bool) {
override open func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.ignoreAppearanceMethodInvocations() {
@ -410,7 +410,7 @@ public class LegacyController: ViewController, PresentableController {
private var viewDidAppearProcessed = false
override public func viewDidAppear(_ animated: Bool) {
override open func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.enableContainerLayoutUpdates = true
if self.ignoreAppearanceMethodInvocations() {
@ -448,7 +448,7 @@ public class LegacyController: ViewController, PresentableController {
}
}
override public func viewDidDisappear(_ animated: Bool) {
override open func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.viewDidAppearProcessed = false
@ -459,7 +459,7 @@ public class LegacyController: ViewController, PresentableController {
self.legacyController.viewDidDisappear(animated && passControllerAppearanceAnimated(in: false, presentation: self.presentation))
}
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override open func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
let previousSizeClass: UIUserInterfaceSizeClass
if let validLayout = self.validLayout, case .regular = validLayout.metrics.widthClass {
previousSizeClass = .regular
@ -523,7 +523,7 @@ public class LegacyController: ViewController, PresentableController {
}
}
func dismissWithAnimation() {
public func dismissWithAnimation() {
self.controllerNode.animateModalOut { [weak self] in
self?.presentingViewController?.dismiss(animated: false, completion: nil)
}

View file

@ -3,21 +3,21 @@ import UIKit
import LegacyComponents
import Display
final class LegacyEmptyController: TGViewController {
override init!(context: LegacyComponentsContext!) {
public final class LegacyEmptyController: TGViewController {
override public init!(context: LegacyComponentsContext!) {
super.init(context: context)
}
required init?(coder aDecoder: NSCoder) {
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
override public func viewDidLoad() {
self.view.backgroundColor = nil
self.view.isOpaque = false
}
override func present(context generator: ((LegacyComponentsContext?) -> UIViewController?)!) {
override public func present(context generator: ((LegacyComponentsContext?) -> UIViewController?)!) {
if let context = self.context as? LegacyControllerContext, let controller = context.controller {
let context = legacyContextGet()
let presentationData = context?.sharedContext.currentPresentationData.with { $0 }

View file

@ -2,7 +2,7 @@ import Foundation
import UIKit
import LegacyComponents
func makeLegacyNavigationController(rootController: UIViewController) -> TGNavigationController {
public func makeLegacyNavigationController(rootController: UIViewController) -> TGNavigationController {
return TGNavigationController.make(withRootController: rootController)
}

View file

@ -0,0 +1,19 @@
//
// LegacyUI.h
// LegacyUI
//
// Created by Peter on 8/12/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for LegacyUI.
FOUNDATION_EXPORT double LegacyUIVersionNumber;
//! Project version string for LegacyUI.
FOUNDATION_EXPORT const unsigned char LegacyUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <LegacyUI/PublicHeader.h>

View file

@ -22,7 +22,7 @@ public func updateLegacyLocalization(strings: PresentationStrings) {
legacyLocalization = TGLocalization(version: 0, code: strings.primaryComponent.languageCode, dict: strings.primaryComponent.dict, isActive: true)
}
func updateLegacyTheme() {
public func updateLegacyTheme() {
TGCheckButtonView.resetCache()
}

View file

@ -75,6 +75,8 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
let readCount = min(resourceSize - context.readingOffset, Int(bufferSize))
let requestRange: Range<Int> = context.readingOffset ..< (context.readingOffset + readCount)
precondition(readCount < 1 * 1024 * 1024)
if let maximumFetchSize = context.maximumFetchSize {
context.touchedRanges.insert(integersIn: requestRange)
var totalCount = 0
@ -122,12 +124,14 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
let readingOffset = context.readingOffset
let readCount = max(0, min(fileSize - readingOffset, Int(bufferSize)))
let range = readingOffset ..< (readingOffset + readCount)
precondition(readCount < 1 * 1024 * 1024)
lseek(fd, off_t(range.lowerBound), SEEK_SET)
var data = Data(count: readCount)
data.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer<UInt8>) -> Void in
let readBytes = read(fd, bytes, readCount)
assert(readBytes <= readCount)
data.withUnsafeMutableBytes { bytes -> Void in
precondition(bytes.baseAddress != nil)
let readBytes = read(fd, bytes.baseAddress, readCount)
precondition(readBytes <= readCount)
}
fetchedData = data
close(fd)
@ -143,13 +147,17 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
let readCount = max(0, min(next.size - readingOffset, Int(bufferSize)))
let range = readingOffset ..< (readingOffset + readCount)
precondition(readCount < 1 * 1024 * 1024)
let fd = open(next.path, O_RDONLY, S_IRUSR)
if fd >= 0 {
lseek(fd, off_t(range.lowerBound), SEEK_SET)
var data = Data(count: readCount)
data.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer<UInt8>) -> Void in
let readBytes = read(fd, bytes, readCount)
data.withUnsafeMutableBytes { bytes -> Void in
precondition(bytes.baseAddress != nil)
let readBytes = read(fd, bytes.baseAddress, readCount)
assert(readBytes <= readCount)
precondition(readBytes <= readCount)
}
fetchedData = data
close(fd)
@ -168,8 +176,9 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
}
}
if let fetchedData = fetchedData {
fetchedData.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> Void in
memcpy(buffer, bytes, fetchedData.count)
fetchedData.withUnsafeBytes { bytes -> Void in
precondition(bytes.baseAddress != nil)
memcpy(buffer, bytes.baseAddress, fetchedData.count)
}
fetchedCount = Int32(fetchedData.count)
context.readingOffset += Int(fetchedCount)

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,603 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C40F2300D60C00FAB518 /* OpenInExternalAppUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C41C2300D67800FAB518 /* OpenInOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4192300D67800FAB518 /* OpenInOptions.swift */; };
D0C9C41D2300D67800FAB518 /* OpenInActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */; };
D0C9C41E2300D67800FAB518 /* OpenInAppIconResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */; };
D0C9C4212300D68A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4202300D68A00FAB518 /* Foundation.framework */; };
D0C9C4232300D68D00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4222300D68D00FAB518 /* UIKit.framework */; };
D0C9C4252300D69000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4242300D69000FAB518 /* Display.framework */; };
D0C9C4272300D69500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */; };
D0C9C4292300D69900FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */; };
D0C9C42B2300D69D00FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42A2300D69D00FAB518 /* Postbox.framework */; };
D0C9C42D2300D6A200FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */; };
D0C9C42F2300D6A700FAB518 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42E2300D6A700FAB518 /* MapKit.framework */; };
D0C9C4312300D6AB00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */; };
D0C9C4332300D6B100FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4322300D6B100FAB518 /* AccountContext.framework */; };
D0C9C4352300D6B500FAB518 /* PhotoResources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4342300D6B500FAB518 /* PhotoResources.framework */; };
D0C9C4372300D6C100FAB518 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4362300D6C000FAB518 /* CoreLocation.framework */; };
D0C9C4392300D6C400FAB518 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */; };
D0C9C43F2300D75500FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenInExternalAppUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenInExternalAppUI.h; sourceTree = "<group>"; };
D0C9C40E2300D60C00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C4192300D67800FAB518 /* OpenInOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInOptions.swift; sourceTree = "<group>"; };
D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInActionSheetController.swift; sourceTree = "<group>"; };
D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInAppIconResources.swift; sourceTree = "<group>"; };
D0C9C4202300D68A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C4222300D68D00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C4242300D69000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C42A2300D69D00FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C42E2300D6A700FAB518 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; };
D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4322300D6B100FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4342300D6B500FAB518 /* PhotoResources.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PhotoResources.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4362300D6C000FAB518 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UrlEscaping.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C4072300D60C00FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C4392300D6C400FAB518 /* UrlEscaping.framework in Frameworks */,
D0C9C4372300D6C100FAB518 /* CoreLocation.framework in Frameworks */,
D0C9C4352300D6B500FAB518 /* PhotoResources.framework in Frameworks */,
D0C9C4332300D6B100FAB518 /* AccountContext.framework in Frameworks */,
D0C9C4312300D6AB00FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C42F2300D6A700FAB518 /* MapKit.framework in Frameworks */,
D0C9C42D2300D6A200FAB518 /* TelegramCore.framework in Frameworks */,
D0C9C42B2300D69D00FAB518 /* Postbox.framework in Frameworks */,
D0C9C4292300D69900FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C4272300D69500FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C4252300D69000FAB518 /* Display.framework in Frameworks */,
D0C9C4232300D68D00FAB518 /* UIKit.framework in Frameworks */,
D0C9C4212300D68A00FAB518 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C4002300D60C00FAB518 = {
isa = PBXGroup;
children = (
D0C9C40E2300D60C00FAB518 /* Info.plist */,
D0C9C40C2300D60C00FAB518 /* Sources */,
D0C9C40B2300D60C00FAB518 /* Products */,
D0C9C41F2300D68A00FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C40B2300D60C00FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C40C2300D60C00FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */,
D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */,
D0C9C4192300D67800FAB518 /* OpenInOptions.swift */,
D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */,
D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C41F2300D68A00FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */,
D0C9C4362300D6C000FAB518 /* CoreLocation.framework */,
D0C9C4342300D6B500FAB518 /* PhotoResources.framework */,
D0C9C4322300D6B100FAB518 /* AccountContext.framework */,
D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */,
D0C9C42E2300D6A700FAB518 /* MapKit.framework */,
D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */,
D0C9C42A2300D69D00FAB518 /* Postbox.framework */,
D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */,
D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */,
D0C9C4242300D69000FAB518 /* Display.framework */,
D0C9C4222300D68D00FAB518 /* UIKit.framework */,
D0C9C4202300D68A00FAB518 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C4052300D60C00FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C40F2300D60C00FAB518 /* OpenInExternalAppUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C4092300D60C00FAB518 /* OpenInExternalAppUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C4122300D60C00FAB518 /* Build configuration list for PBXNativeTarget "OpenInExternalAppUI" */;
buildPhases = (
D0C9C4052300D60C00FAB518 /* Headers */,
D0C9C4062300D60C00FAB518 /* Sources */,
D0C9C4072300D60C00FAB518 /* Frameworks */,
D0C9C4082300D60C00FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = OpenInExternalAppUI;
productName = OpenInExternalAppUI;
productReference = D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C4012300D60C00FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C4092300D60C00FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C4042300D60C00FAB518 /* Build configuration list for PBXProject "OpenInExternalAppUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C4002300D60C00FAB518;
productRefGroup = D0C9C40B2300D60C00FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C4092300D60C00FAB518 /* OpenInExternalAppUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C4082300D60C00FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C4062300D60C00FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C43F2300D75500FAB518 /* FrameworkBundle.swift in Sources */,
D0C9C41D2300D67800FAB518 /* OpenInActionSheetController.swift in Sources */,
D0C9C41C2300D67800FAB518 /* OpenInOptions.swift in Sources */,
D0C9C41E2300D67800FAB518 /* OpenInAppIconResources.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C4102300D60C00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C4112300D60C00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C4132300D60C00FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C4142300D60C00FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C4152300D65600FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C4162300D65600FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C4172300D66100FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C4182300D66100FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C4042300D60C00FAB518 /* Build configuration list for PBXProject "OpenInExternalAppUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4102300D60C00FAB518 /* DebugAppStoreLLC */,
D0C9C4152300D65600FAB518 /* DebugHockeyapp */,
D0C9C4112300D60C00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4172300D66100FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C4122300D60C00FAB518 /* Build configuration list for PBXNativeTarget "OpenInExternalAppUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C4132300D60C00FAB518 /* DebugAppStoreLLC */,
D0C9C4162300D65600FAB518 /* DebugHockeyapp */,
D0C9C4142300D60C00FAB518 /* ReleaseAppStoreLLC */,
D0C9C4182300D66100FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C4012300D60C00FAB518 /* Project object */;
}

View file

@ -0,0 +1,13 @@
import Foundation
import UIKit
private class FrameworkBundleClass: NSObject {
}
let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self)
extension UIImage {
convenience init?(bundleImageName: String) {
self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil)
}
}

View file

@ -11,19 +11,24 @@ import AccountContext
import PhotoResources
public struct OpenInControllerAction {
let title: String
let action: () -> Void
public let title: String
public let action: () -> Void
public init(title: String, action: @escaping () -> Void) {
self.title = title
self.action = action
}
}
final class OpenInActionSheetController: ActionSheetController {
public final class OpenInActionSheetController: ActionSheetController {
private var presentationDisposable: Disposable?
private let _ready = Promise<Bool>()
override var ready: Promise<Bool> {
override public var ready: Promise<Bool> {
return self._ready
}
init(context: AccountContext, item: OpenInItem, additionalAction: OpenInControllerAction? = nil, openUrl: @escaping (String) -> Void) {
public init(context: AccountContext, item: OpenInItem, additionalAction: OpenInControllerAction? = nil, openUrl: @escaping (String) -> Void) {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
let theme = presentationData.theme
let strings = presentationData.strings
@ -77,7 +82,7 @@ final class OpenInActionSheetController: ActionSheetController {
])
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

View file

@ -60,7 +60,7 @@ public class OpenInAppIconResource: TelegramMediaResource {
}
}
func fetchOpenInAppIconResource(resource: OpenInAppIconResource) -> Signal<MediaResourceDataFetchResult, MediaResourceDataFetchError> {
public func fetchOpenInAppIconResource(resource: OpenInAppIconResource) -> Signal<MediaResourceDataFetchResult, MediaResourceDataFetchError> {
return Signal { subscriber in
subscriber.putNext(.reset)

View file

@ -0,0 +1,19 @@
//
// OpenInExternalAppUI.h
// OpenInExternalAppUI
//
// Created by Peter on 8/12/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for OpenInExternalAppUI.
FOUNDATION_EXPORT double OpenInExternalAppUIVersionNumber;
//! Project version string for OpenInExternalAppUI.
FOUNDATION_EXPORT const unsigned char OpenInExternalAppUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <OpenInExternalAppUI/PublicHeader.h>

View file

@ -6,33 +6,33 @@ import MapKit
import AccountContext
import UrlEscaping
enum OpenInItem {
public enum OpenInItem {
case url(url: String)
case location(location: TelegramMediaMap, withDirections: Bool)
}
enum OpenInApplication {
public enum OpenInApplication {
case safari
case maps
case other(title: String, identifier: Int64, scheme: String, store: String?)
}
enum OpenInAction {
public enum OpenInAction {
case none
case openUrl(url: String)
case openLocation(latitude: Double, longitude: Double, withDirections: Bool)
}
final class OpenInOption {
let application: OpenInApplication
let action: () -> OpenInAction
public final class OpenInOption {
public let application: OpenInApplication
public let action: () -> OpenInAction
init(application: OpenInApplication, action: @escaping () -> OpenInAction) {
public init(application: OpenInApplication, action: @escaping () -> OpenInAction) {
self.application = application
self.action = action
}
var title: String {
public var title: String {
get {
switch self.application {
case .safari:
@ -46,7 +46,7 @@ final class OpenInOption {
}
}
func availableOpenInOptions(context: AccountContext, item: OpenInItem) -> [OpenInOption] {
public func availableOpenInOptions(context: AccountContext, item: OpenInItem) -> [OpenInOption] {
return allOpenInOptions(context: context, item: item).filter { option in
if case let .other(_, _, scheme, _) = option.application {
return context.sharedContext.applicationBindings.canOpenUrl("\(scheme)://")

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,775 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
D0C9C1F02300222100FAB518 /* PassportUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C1EE2300222100FAB518 /* PassportUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0C9C220230022AB00FAB518 /* SecureIdValueFormFileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */; };
D0C9C221230022AB00FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */; };
D0C9C222230022AB00FAB518 /* SecureIdDocumentImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */; };
D0C9C223230022AB00FAB518 /* SecureIdAuthListFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */; };
D0C9C224230022AB00FAB518 /* SecureIdDocumentFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */; };
D0C9C225230022AB00FAB518 /* SecureIdDocumentFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */; };
D0C9C226230022AB00FAB518 /* SecureIdValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C200230022A400FAB518 /* SecureIdValues.swift */; };
D0C9C227230022AB00FAB518 /* SecureIdAuthListContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */; };
D0C9C228230022AB00FAB518 /* SecureIdDocumentGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */; };
D0C9C229230022AB00FAB518 /* SecureIdAuthControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */; };
D0C9C22A230022AB00FAB518 /* SecureIdVerificationDocumentsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */; };
D0C9C22B230022AB00FAB518 /* SecureIdValueFormPhoneItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */; };
D0C9C22C230022AB00FAB518 /* FormControllerActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */; };
D0C9C22D230022AB00FAB518 /* FormEditableBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */; };
D0C9C22E230022AB00FAB518 /* FormControllerScrollerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */; };
D0C9C22F230022AB00FAB518 /* FormControllerTextItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */; };
D0C9C230230022AB00FAB518 /* SecureIdAuthHeaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */; };
D0C9C231230022AB00FAB518 /* SecureIdAuthAcceptNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */; };
D0C9C232230022AB00FAB518 /* SecureIdDocumentTypeSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */; };
D0C9C233230022AB00FAB518 /* SecureIdAuthControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */; };
D0C9C234230022AB00FAB518 /* FormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20E230022A700FAB518 /* FormControllerNode.swift */; };
D0C9C235230022AB00FAB518 /* FormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20F230022A700FAB518 /* FormController.swift */; };
D0C9C236230022AB00FAB518 /* FormBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */; };
D0C9C237230022AB00FAB518 /* SecureIdAuthFormContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */; };
D0C9C238230022AB00FAB518 /* FormControllerTextInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */; };
D0C9C239230022AB00FAB518 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */; };
D0C9C23A230022AB00FAB518 /* SecureIdAuthPasswordSetupContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */; };
D0C9C23B230022AB00FAB518 /* SecureIdAuthFormFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */; };
D0C9C23C230022AB00FAB518 /* SecureIdAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */; };
D0C9C23D230022AB00FAB518 /* FormControllerDetailActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */; };
D0C9C23E230022AB00FAB518 /* SecureIdLocalResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */; };
D0C9C23F230022AB00FAB518 /* SecureIdPlaintextFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */; };
D0C9C240230022AB00FAB518 /* SecureIdPlaintextFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */; };
D0C9C241230022AB00FAB518 /* SecureIdVerificationDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */; };
D0C9C242230022AB00FAB518 /* FormControllerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */; };
D0C9C243230022AB00FAB518 /* SecureIdAuthContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */; };
D0C9C244230022AB00FAB518 /* FormControllerHeaderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */; };
D0C9C247230022C100FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C246230022C100FAB518 /* UIKit.framework */; };
D0C9C249230022C300FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C248230022C200FAB518 /* Foundation.framework */; };
D0C9C24B230022C500FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24A230022C500FAB518 /* Postbox.framework */; };
D0C9C24D230022C900FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24C230022C900FAB518 /* TelegramCore.framework */; };
D0C9C24F230022CE00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */; };
D0C9C251230022D400FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */; };
D0C9C253230022D800FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C252230022D800FAB518 /* Display.framework */; };
D0C9C255230022E000FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */; };
D0C9C25923009EC900FAB518 /* FindSecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */; };
D0C9C2812300A04900FAB518 /* PhoneInputNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */; };
D0C9C2852300A0BF00FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */; };
D0C9C2B32300A1D300FAB518 /* CountrySelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */; };
D0C9C3332300AA0100FAB518 /* GalleryUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3322300AA0100FAB518 /* GalleryUI.framework */; };
D0C9C4492300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */; };
D0C9C44B2300E17600FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */; };
D0C9C44D2300E17A00FAB518 /* OverlayStatusController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */; };
D0C9C44F2300E1D600FAB518 /* LegacySecureIdScanController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */; };
D0C9C47D2300E31700FAB518 /* LegacyUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C47C2300E31700FAB518 /* LegacyUI.framework */; };
D0C9C4BF2300E5B400FAB518 /* ImageCompression.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */; };
D0C9C4DA2300E67200FAB518 /* DateSelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */; };
D0C9C52D2300EFB100FAB518 /* PasswordSetupUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
D0C9C1EB2300222100FAB518 /* PassportUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PassportUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C1EE2300222100FAB518 /* PassportUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PassportUI.h; sourceTree = "<group>"; };
D0C9C1EF2300222100FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormFileItem.swift; sourceTree = "<group>"; };
D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryFooterContentNode.swift; sourceTree = "<group>"; };
D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentImageGalleryItem.swift; sourceTree = "<group>"; };
D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListFieldNode.swift; sourceTree = "<group>"; };
D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormController.swift; sourceTree = "<group>"; };
D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormControllerNode.swift; sourceTree = "<group>"; };
D0C9C200230022A400FAB518 /* SecureIdValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValues.swift; sourceTree = "<group>"; };
D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListContentNode.swift; sourceTree = "<group>"; };
D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryController.swift; sourceTree = "<group>"; };
D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerNode.swift; sourceTree = "<group>"; };
D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocumentsContext.swift; sourceTree = "<group>"; };
D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormPhoneItem.swift; sourceTree = "<group>"; };
D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerActionItem.swift; sourceTree = "<group>"; };
D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormEditableBlockItemNode.swift; sourceTree = "<group>"; };
D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerScrollerNode.swift; sourceTree = "<group>"; };
D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerTextItem.swift; sourceTree = "<group>"; };
D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthHeaderNode.swift; sourceTree = "<group>"; };
D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthAcceptNode.swift; sourceTree = "<group>"; };
D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentTypeSelectionController.swift; sourceTree = "<group>"; };
D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerState.swift; sourceTree = "<group>"; };
D0C9C20E230022A700FAB518 /* FormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerNode.swift; sourceTree = "<group>"; };
D0C9C20F230022A700FAB518 /* FormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormController.swift; sourceTree = "<group>"; };
D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormBlockItemNode.swift; sourceTree = "<group>"; };
D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormContentNode.swift; sourceTree = "<group>"; };
D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerTextInputItem.swift; sourceTree = "<group>"; };
D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordOptionContentNode.swift; sourceTree = "<group>"; };
D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordSetupContentNode.swift; sourceTree = "<group>"; };
D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormFieldNode.swift; sourceTree = "<group>"; };
D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthController.swift; sourceTree = "<group>"; };
D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerDetailActionItem.swift; sourceTree = "<group>"; };
D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdLocalResource.swift; sourceTree = "<group>"; };
D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormController.swift; sourceTree = "<group>"; };
D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormControllerNode.swift; sourceTree = "<group>"; };
D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocument.swift; sourceTree = "<group>"; };
D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerItem.swift; sourceTree = "<group>"; };
D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthContentNode.swift; sourceTree = "<group>"; };
D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerHeaderItem.swift; sourceTree = "<group>"; };
D0C9C246230022C100FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
D0C9C248230022C200FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
D0C9C24A230022C500FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C24C230022C900FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C252230022D800FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FindSecureIdValue.swift; sourceTree = "<group>"; };
D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PhoneInputNode.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = "<group>"; };
D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CountrySelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C3322300AA0100FAB518 /* GalleryUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GalleryUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySecureIdAttachmentMenu.swift; sourceTree = "<group>"; };
D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OverlayStatusController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySecureIdScanController.swift; sourceTree = "<group>"; };
D0C9C47C2300E31700FAB518 /* LegacyUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageCompression.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DateSelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PasswordSetupUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D0C9C1E82300222100FAB518 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C52D2300EFB100FAB518 /* PasswordSetupUI.framework in Frameworks */,
D0C9C4DA2300E67200FAB518 /* DateSelectionUI.framework in Frameworks */,
D0C9C4BF2300E5B400FAB518 /* ImageCompression.framework in Frameworks */,
D0C9C47D2300E31700FAB518 /* LegacyUI.framework in Frameworks */,
D0C9C44D2300E17A00FAB518 /* OverlayStatusController.framework in Frameworks */,
D0C9C44B2300E17600FAB518 /* LegacyComponents.framework in Frameworks */,
D0C9C3332300AA0100FAB518 /* GalleryUI.framework in Frameworks */,
D0C9C2B32300A1D300FAB518 /* CountrySelectionUI.framework in Frameworks */,
D0C9C2812300A04900FAB518 /* PhoneInputNode.framework in Frameworks */,
D0C9C255230022E000FAB518 /* TelegramPresentationData.framework in Frameworks */,
D0C9C253230022D800FAB518 /* Display.framework in Frameworks */,
D0C9C251230022D400FAB518 /* AsyncDisplayKit.framework in Frameworks */,
D0C9C24F230022CE00FAB518 /* SwiftSignalKit.framework in Frameworks */,
D0C9C24D230022C900FAB518 /* TelegramCore.framework in Frameworks */,
D0C9C24B230022C500FAB518 /* Postbox.framework in Frameworks */,
D0C9C249230022C300FAB518 /* Foundation.framework in Frameworks */,
D0C9C247230022C100FAB518 /* UIKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
D0C9C1E12300222100FAB518 = {
isa = PBXGroup;
children = (
D0C9C1EF2300222100FAB518 /* Info.plist */,
D0C9C1ED2300222100FAB518 /* Sources */,
D0C9C1EC2300222100FAB518 /* Products */,
D0C9C245230022BF00FAB518 /* Frameworks */,
);
sourceTree = "<group>";
};
D0C9C1EC2300222100FAB518 /* Products */ = {
isa = PBXGroup;
children = (
D0C9C1EB2300222100FAB518 /* PassportUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
D0C9C1ED2300222100FAB518 /* Sources */ = {
isa = PBXGroup;
children = (
D0C9C21C230022AB00FAB518 /* Form */,
D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */,
D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */,
D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */,
D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */,
D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */,
D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */,
D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */,
D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */,
D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */,
D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */,
D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */,
D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */,
D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */,
D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */,
D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */,
D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */,
D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */,
D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */,
D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */,
D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */,
D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */,
D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */,
D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */,
D0C9C200230022A400FAB518 /* SecureIdValues.swift */,
D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */,
D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */,
D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */,
D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */,
D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */,
D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */,
D0C9C1EE2300222100FAB518 /* PassportUI.h */,
);
path = Sources;
sourceTree = "<group>";
};
D0C9C21C230022AB00FAB518 /* Form */ = {
isa = PBXGroup;
children = (
D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */,
D0C9C20F230022A700FAB518 /* FormController.swift */,
D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */,
D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */,
D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */,
D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */,
D0C9C20E230022A700FAB518 /* FormControllerNode.swift */,
D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */,
D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */,
D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */,
D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */,
);
path = Form;
sourceTree = "<group>";
};
D0C9C245230022BF00FAB518 /* Frameworks */ = {
isa = PBXGroup;
children = (
D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */,
D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */,
D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */,
D0C9C47C2300E31700FAB518 /* LegacyUI.framework */,
D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */,
D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */,
D0C9C3322300AA0100FAB518 /* GalleryUI.framework */,
D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */,
D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */,
D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */,
D0C9C252230022D800FAB518 /* Display.framework */,
D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */,
D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */,
D0C9C24C230022C900FAB518 /* TelegramCore.framework */,
D0C9C24A230022C500FAB518 /* Postbox.framework */,
D0C9C248230022C200FAB518 /* Foundation.framework */,
D0C9C246230022C100FAB518 /* UIKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
D0C9C1E62300222100FAB518 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C1F02300222100FAB518 /* PassportUI.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
D0C9C1EA2300222100FAB518 /* PassportUI */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0C9C1F32300222100FAB518 /* Build configuration list for PBXNativeTarget "PassportUI" */;
buildPhases = (
D0C9C1E62300222100FAB518 /* Headers */,
D0C9C1E72300222100FAB518 /* Sources */,
D0C9C1E82300222100FAB518 /* Frameworks */,
D0C9C1E92300222100FAB518 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = PassportUI;
productName = PassportUI;
productReference = D0C9C1EB2300222100FAB518 /* PassportUI.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
D0C9C1E22300222100FAB518 /* Project object */ = {
isa = PBXProject;
attributes = {
DefaultBuildSystemTypeForWorkspace = Latest;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = "Telegram Messenger LLP";
TargetAttributes = {
D0C9C1EA2300222100FAB518 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = D0C9C1E52300222100FAB518 /* Build configuration list for PBXProject "PassportUI_Xcode" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = D0C9C1E12300222100FAB518;
productRefGroup = D0C9C1EC2300222100FAB518 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
D0C9C1EA2300222100FAB518 /* PassportUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0C9C1E92300222100FAB518 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0C9C1E72300222100FAB518 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D0C9C222230022AB00FAB518 /* SecureIdDocumentImageGalleryItem.swift in Sources */,
D0C9C221230022AB00FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */,
D0C9C44F2300E1D600FAB518 /* LegacySecureIdScanController.swift in Sources */,
D0C9C229230022AB00FAB518 /* SecureIdAuthControllerNode.swift in Sources */,
D0C9C240230022AB00FAB518 /* SecureIdPlaintextFormControllerNode.swift in Sources */,
D0C9C4492300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift in Sources */,
D0C9C22F230022AB00FAB518 /* FormControllerTextItem.swift in Sources */,
D0C9C226230022AB00FAB518 /* SecureIdValues.swift in Sources */,
D0C9C242230022AB00FAB518 /* FormControllerItem.swift in Sources */,
D0C9C243230022AB00FAB518 /* SecureIdAuthContentNode.swift in Sources */,
D0C9C23F230022AB00FAB518 /* SecureIdPlaintextFormController.swift in Sources */,
D0C9C244230022AB00FAB518 /* FormControllerHeaderItem.swift in Sources */,
D0C9C232230022AB00FAB518 /* SecureIdDocumentTypeSelectionController.swift in Sources */,
D0C9C231230022AB00FAB518 /* SecureIdAuthAcceptNode.swift in Sources */,
D0C9C25923009EC900FAB518 /* FindSecureIdValue.swift in Sources */,
D0C9C225230022AB00FAB518 /* SecureIdDocumentFormControllerNode.swift in Sources */,
D0C9C234230022AB00FAB518 /* FormControllerNode.swift in Sources */,
D0C9C22A230022AB00FAB518 /* SecureIdVerificationDocumentsContext.swift in Sources */,
D0C9C224230022AB00FAB518 /* SecureIdDocumentFormController.swift in Sources */,
D0C9C23C230022AB00FAB518 /* SecureIdAuthController.swift in Sources */,
D0C9C22E230022AB00FAB518 /* FormControllerScrollerNode.swift in Sources */,
D0C9C22C230022AB00FAB518 /* FormControllerActionItem.swift in Sources */,
D0C9C2852300A0BF00FAB518 /* FrameworkBundle.swift in Sources */,
D0C9C237230022AB00FAB518 /* SecureIdAuthFormContentNode.swift in Sources */,
D0C9C22D230022AB00FAB518 /* FormEditableBlockItemNode.swift in Sources */,
D0C9C239230022AB00FAB518 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */,
D0C9C23D230022AB00FAB518 /* FormControllerDetailActionItem.swift in Sources */,
D0C9C227230022AB00FAB518 /* SecureIdAuthListContentNode.swift in Sources */,
D0C9C241230022AB00FAB518 /* SecureIdVerificationDocument.swift in Sources */,
D0C9C228230022AB00FAB518 /* SecureIdDocumentGalleryController.swift in Sources */,
D0C9C223230022AB00FAB518 /* SecureIdAuthListFieldNode.swift in Sources */,
D0C9C238230022AB00FAB518 /* FormControllerTextInputItem.swift in Sources */,
D0C9C23A230022AB00FAB518 /* SecureIdAuthPasswordSetupContentNode.swift in Sources */,
D0C9C230230022AB00FAB518 /* SecureIdAuthHeaderNode.swift in Sources */,
D0C9C23B230022AB00FAB518 /* SecureIdAuthFormFieldNode.swift in Sources */,
D0C9C233230022AB00FAB518 /* SecureIdAuthControllerState.swift in Sources */,
D0C9C235230022AB00FAB518 /* FormController.swift in Sources */,
D0C9C22B230022AB00FAB518 /* SecureIdValueFormPhoneItem.swift in Sources */,
D0C9C220230022AB00FAB518 /* SecureIdValueFormFileItem.swift in Sources */,
D0C9C23E230022AB00FAB518 /* SecureIdLocalResource.swift in Sources */,
D0C9C236230022AB00FAB518 /* FormBlockItemNode.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
D0C9C1F12300222100FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugAppStoreLLC;
};
D0C9C1F22300222100FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseAppStoreLLC;
};
D0C9C1F42300222100FAB518 /* DebugAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugAppStoreLLC;
};
D0C9C1F52300222100FAB518 /* ReleaseAppStoreLLC */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseAppStoreLLC;
};
D0C9C1F62300225100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = DebugHockeyapp;
};
D0C9C1F72300225100FAB518 /* DebugHockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = DebugHockeyapp;
};
D0C9C1F82300225D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = ReleaseHockeyappInternal;
};
D0C9C1F92300225D00FAB518 /* ReleaseHockeyappInternal */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Manual;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = ReleaseHockeyappInternal;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0C9C1E52300222100FAB518 /* Build configuration list for PBXProject "PassportUI_Xcode" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C1F12300222100FAB518 /* DebugAppStoreLLC */,
D0C9C1F62300225100FAB518 /* DebugHockeyapp */,
D0C9C1F22300222100FAB518 /* ReleaseAppStoreLLC */,
D0C9C1F82300225D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
D0C9C1F32300222100FAB518 /* Build configuration list for PBXNativeTarget "PassportUI" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0C9C1F42300222100FAB518 /* DebugAppStoreLLC */,
D0C9C1F72300225100FAB518 /* DebugHockeyapp */,
D0C9C1F52300222100FAB518 /* ReleaseAppStoreLLC */,
D0C9C1F92300225D00FAB518 /* ReleaseHockeyappInternal */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = ReleaseAppStoreLLC;
};
/* End XCConfigurationList section */
};
rootObject = D0C9C1E22300222100FAB518 /* Project object */;
}

View file

@ -6,8 +6,8 @@ import Display
import TelegramCore
import TelegramPresentationData
class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams, InnerState>>: ViewController {
var controllerNode: Node {
public class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams, InnerState>>: ViewController {
public var controllerNode: Node {
return self.displayNode as! Node
}
@ -29,7 +29,7 @@ class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams
fatalError("init(coder:) has not been implemented")
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !self.didPlayPresentationAnimation {
@ -38,7 +38,7 @@ class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams
}
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
self.controllerNode.view.endEditing(true)
self.controllerNode.animateOut(completion: { [weak self] in
self?.presentingViewController?.dismiss(animated: false, completion: nil)
@ -46,7 +46,7 @@ class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams
})
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
self.displayNode = Node(initParams: self.initParams, presentationData: self.presentationData)
self.controllerNode.present = { [weak self] c, a in
self?.present(c, in: .window(.root), with: a)
@ -55,7 +55,7 @@ class FormController<InnerState, InitParams, Node: FormControllerNode<InitParams
self.displayNodeDidLoad()
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationHeight: self.navigationHeight, transition: transition)

View file

@ -5,33 +5,33 @@ import Display
import TelegramPresentationData
import MergeLists
protocol FormControllerEntry: Identifiable {
public protocol FormControllerEntry: Identifiable {
associatedtype ItemParams
func isEqual(to: Self) -> Bool
func item(params: ItemParams, strings: PresentationStrings) -> FormControllerItem
}
enum FormControllerItemNeighbor {
public enum FormControllerItemNeighbor {
case none
case spacer
case item(FormControllerItemNode)
}
struct FormControllerItemPreLayout {
public struct FormControllerItemPreLayout {
let aligningInset: CGFloat
}
struct FormControllerItemLayoutParams {
public struct FormControllerItemLayoutParams {
let maxAligningInset: CGFloat
}
protocol FormControllerItem {
public protocol FormControllerItem {
func node() -> ASDisplayNode & FormControllerItemNode
func update(node: ASDisplayNode & FormControllerItemNode, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, width: CGFloat, previousNeighbor: FormControllerItemNeighbor, nextNeighbor: FormControllerItemNeighbor, transition: ContainedViewLayoutTransition) -> (FormControllerItemPreLayout, (FormControllerItemLayoutParams) -> CGFloat)
}
protocol FormControllerItemNode {
public protocol FormControllerItemNode {
var preventsTouchesToOtherItems: Bool { get }
func touchesToOtherItemsPrevented()
}

View file

@ -82,18 +82,18 @@ struct FormControllerInternalState<InnerState: FormControllerInnerState> {
}
}
struct FormControllerState<InnerState: FormControllerInnerState> {
public struct FormControllerState<InnerState: FormControllerInnerState> {
let layoutState: FormControllerLayoutState
let presentationState: FormControllerPresentationState
let innerState: InnerState
}
enum FormControllerItemEntry<Entry: FormControllerEntry> {
public enum FormControllerItemEntry<Entry: FormControllerEntry> {
case entry(Entry)
case spacer
}
protocol FormControllerInnerState {
public protocol FormControllerInnerState {
associatedtype Entry: FormControllerEntry
func isEqual(to: Self) -> Bool
@ -105,7 +105,7 @@ private enum FilteredItemNeighbor {
case item(FormControllerItem)
}
class FormControllerNode<InitParams, InnerState: FormControllerInnerState>: ViewControllerTracingNode, UIScrollViewDelegate {
public class FormControllerNode<InitParams, InnerState: FormControllerInnerState>: ViewControllerTracingNode, UIScrollViewDelegate {
private typealias InternalState = FormControllerInternalState<InnerState>
typealias State = FormControllerState<InnerState>
typealias Entry = InnerState.Entry
@ -131,7 +131,7 @@ class FormControllerNode<InitParams, InnerState: FormControllerInnerState>: View
preconditionFailure()
}
required init(initParams: InitParams, presentationData: PresentationData) {
required public init(initParams: InitParams, presentationData: PresentationData) {
self.internalState = FormControllerInternalState(layoutState: nil, presentationState: FormControllerPresentationState(theme: presentationData.theme, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat), innerState: nil)
self.scrollNode = FormControllerScrollerNode()

View file

@ -0,0 +1,13 @@
import Foundation
import UIKit
private class FrameworkBundleClass: NSObject {
}
let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self)
extension UIImage {
convenience init?(bundleImageName: String) {
self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil)
}
}

View file

@ -7,6 +7,8 @@ import Postbox
import TelegramCore
import OverlayStatusController
import AccountContext
import LegacyUI
import ImageCompression
enum SecureIdAttachmentMenuType {
case generic

View file

@ -3,6 +3,7 @@ import UIKit
import Display
import LegacyComponents
import TelegramPresentationData
import LegacyUI
func legacySecureIdScanController(theme: PresentationTheme, strings: PresentationStrings, finished: @escaping (SecureIdRecognizedDocumentData?) -> Void) -> ViewController {
let legacyController = LegacyController(presentation: .modal(animateIn: true), theme: theme, strings: strings)

View file

@ -0,0 +1,19 @@
//
// PassportUI.h
// PassportUI
//
// Created by Peter on 8/11/19.
// Copyright © 2019 Telegram Messenger LLP. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for PassportUI.
FOUNDATION_EXPORT double PassportUIVersionNumber;
//! Project version string for PassportUI.
FOUNDATION_EXPORT const unsigned char PassportUIVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <PassportUI/PublicHeader.h>

View file

@ -10,6 +10,7 @@ import TextFormat
import ProgressNavigationButtonNode
import AccountContext
import AlertUI
import PasswordSetupUI
public enum SecureIdRequestResult: String {
case success = "success"
@ -59,12 +60,12 @@ final class SecureIdAuthControllerInteraction {
}
}
enum SecureIdAuthControllerMode {
public enum SecureIdAuthControllerMode {
case form(peerId: PeerId, scope: String, publicKey: String, callbackUrl: String, opaquePayload: Data, opaqueNonce: Data)
case list
}
final class SecureIdAuthController: ViewController {
public final class SecureIdAuthController: ViewController {
private var controllerNode: SecureIdAuthControllerNode {
return self.displayNode as! SecureIdAuthControllerNode
}
@ -85,7 +86,7 @@ final class SecureIdAuthController: ViewController {
private let hapticFeedback = HapticFeedback()
init(context: AccountContext, mode: SecureIdAuthControllerMode) {
public init(context: AccountContext, mode: SecureIdAuthControllerMode) {
self.context = context
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
@ -270,7 +271,7 @@ final class SecureIdAuthController: ViewController {
}
}
required init(coder aDecoder: NSCoder) {
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@ -282,7 +283,7 @@ final class SecureIdAuthController: ViewController {
self.recoveryDisposable.dispose()
}
override func viewDidAppear(_ animated: Bool) {
override public func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !self.didPlayPresentationAnimation {
@ -291,14 +292,14 @@ final class SecureIdAuthController: ViewController {
}
}
override func dismiss(completion: (() -> Void)? = nil) {
override public func dismiss(completion: (() -> Void)? = nil) {
self.controllerNode.animateOut(completion: { [weak self] in
self?.presentingViewController?.dismiss(animated: false, completion: nil)
completion?()
})
}
override func loadDisplayNode() {
override public func loadDisplayNode() {
let interaction = SecureIdAuthControllerInteraction(updateState: { [weak self] f in
self?.updateState(f)
}, present: { [weak self] c, a in
@ -313,7 +314,7 @@ final class SecureIdAuthController: ViewController {
self?.grantAccess()
}, openUrl: { [weak self] url in
if let strongSelf = self {
openExternalUrl(context: strongSelf.context, url: url, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {
self?.view.endEditing(true)
})
}
@ -326,7 +327,7 @@ final class SecureIdAuthController: ViewController {
guard let strongSelf = self else {
return
}
if let infoController = peerInfoController(context: strongSelf.context, peer: peer) {
if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) {
(strongSelf.navigationController as? NavigationController)?.pushViewController(infoController)
}
})
@ -359,7 +360,7 @@ final class SecureIdAuthController: ViewController {
self.controllerNode.updateState(self.state, transition: .immediate)
}
override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
super.containerLayoutUpdated(layout, transition: transition)
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
@ -400,7 +401,7 @@ final class SecureIdAuthController: ViewController {
}
private func openUrl(_ url: String) {
openExternalUrl(context: self.context, url: url, forceExternal: true, presentationData: self.presentationData, navigationController: nil, dismissInput: { [weak self] in
self.context.sharedContext.openExternalUrl(context: self.context, urlContext: .generic, url: url, forceExternal: true, presentationData: self.presentationData, navigationController: nil, dismissInput: { [weak self] in
self?.view.endEditing(true)
})
}
@ -643,7 +644,7 @@ final class SecureIdAuthController: ViewController {
guard let strongSelf = self else {
return
}
openExternalUrl(context: strongSelf.context, url: strongSelf.presentationData.strings.Passport_InfoFAQ_URL, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {
strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: strongSelf.presentationData.strings.Passport_InfoFAQ_URL, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {
self?.view.endEditing(true)
})
})]), in: .window(.root))

View file

@ -6,6 +6,7 @@ import Display
import TelegramCore
import TelegramPresentationData
import TelegramStringFormatting
import CountrySelectionUI
enum SecureIdRequestedIdentityDocument: Int32 {
case passport

Some files were not shown because too many files have changed in this diff Show more