Build

Cocoapods

The easiest way to build the project is to use cocoapods.

SDK frameworks should be added to private cocoapods repo. Details available on the cocoapods websitearrow-up-right.

Podfile example

install! 'cocoapods', :deterministic_uuids => false

minimum_deployment_target = '11.0'

platform :ios, minimum_deployment_target

source <YOUR_PRIVATE_REPOSITORY>
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/brion/OGVKit-Specs.git'

use_frameworks!
inhibit_all_warnings!

project IMClient,

def import_common_pods
    pod 'Firebase', :subspecs => ['Core', 'RemoteConfig']
end

def messaging_kit_pod (name, subspecs)
    pod name, '~> 8400.1.1', :subspecs => subspecs
end

def import_app_pods
    pod 'StaticDataTableViewController', '~> 2.0' 
end

app_target_name = 'IMClient'

target app_target_name do
    messaging_kit_pod('TPDMessagingKit', ['Core', 'Conversation', 'Calls', 'Passcode'])
end

# Uncomment if you need Share Extension
#
# share_ext_target_name = 'ShareExt'
# 
# target share_ext_target_name do
#     messaging_kit_pod('TPDMessagingKit_AppExtension', ['Core', 'Conversation', 'Passcode'])
# end

pods_for_patching_in_share_ext = ['TPDMessagingKit_AppExtension', 'TPDUIKit_AppExtension']
pods_for_patching_in_app = ["Pods-#{app_target_name}}"]

def patch_xconfig (config_path, excess_pods, excess_definitions = [])
    excess_pods.each do |pod|
        %x[sed -i '' -E 's/(-isystem[[:space:]]+)?"\\$\\{PODS_ROOT\\}\\/Headers\\/Public\\/'"#{pod}"'"//g' "#{config_path}"]
        %x[sed -i '' -E 's/"\\$\\{PODS_CONFIGURATION_BUILD_DIR\\}\\/'"#{pod}"'"//g' "#{config_path}"]
        %x[sed -i '' -E 's/-iquote[[:space:]]"\\$\\{PODS_CONFIGURATION_BUILD_DIR\\}\\/'"#{pod}"'\\/'"#{pod}"'\\.framework\\/Headers"//g' "#{config_path}"]
        %x[sed -i '' -E 's/-framework[[:space:]]"'"#{pod}"'"//g' "#{config_path}"]
    end

    excess_definitions.each do |d|
        %x[sed -i '' -E 's/'"#{d}"'/ /g' "#{config_path}"]
    end
end

def patch_target (target, excess_pods, excess_definitions = [])
    target.xcconfigs.each do |name,_|
        patch_xconfig("#{target.client_root}/#{target.xcconfig_relative_path(name)}", excess_pods, excess_definitions)
    end
end

def patch_colors_path (uikit_root_path)
	uikit_root_path.gsub!("/", "\\/")

	%x[sed -i '' -E 's/TPD_UIKIT_ROOT_PATH[[:blank:]]*=[[:blank:]]*.*/TPD_UIKIT_ROOT_PATH = #{uikit_root_path}/' CommonBuildConfig.xcconfig]
end

post_install do |installer|
    excess_pods_for_share_ext = ['TPDMessagingKit', 'TPDUIKit']
    excess_pods_for_app = ['TPDMessagingKit_AppExtension', 'TPDUIKit_AppExtension']

    installer.aggregate_targets.each do |target|
        target.pod_targets.each do |pt|
            if pt.name == 'TPDUIKit'
                patch_colors_path("#{pt.pod_target_srcroot}")
            end
        end
    end

    installer.aggregate_targets.each do |target|
        if target.target_definition.name == share_ext_target_name
            patch_target(target, excess_pods_for_share_ext)
        end

        if target.target_definition.name == app_target_name
            patch_target(target, excess_pods_for_app, ['TPDMESSAGINGKIT_TARGET_IS_EXTENSION', 'TPDUIKIT_TARGET_IS_EXTENSION'])
        end

        target.pod_targets.each do |pt|
            if pods_for_patching_in_share_ext.include? pt.name
                debugName = "#{pt.xcconfig_path}".sub(".xcconfig", ".debug.xcconfig")
                releaseName = "#{pt.xcconfig_path}".sub(".xcconfig", ".release.xcconfig")
                patch_xconfig(debugName, excess_pods_for_share_ext)
                patch_xconfig(releaseName, excess_pods_for_share_ext)
            end

            if pods_for_patching_in_app.include? pt.name
                patch_xconfig("#{pt.xcconfig_path}", excess_pods_for_app)
            end

            if 'FMDB' == pt.name
                debugName = "#{pt.xcconfig_path}".sub(".xcconfig", ".debug.xcconfig")
                releaseName = "#{pt.xcconfig_path}".sub(".xcconfig", ".release.xcconfig")

                %x[sed -i '' -E 's/-l"sqlite3"//g' "#{debugName}"]
                %x[sed -i '' -E 's/-l"sqlite3"//g' "#{releaseName}"]
            end
        end
    end

    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if !config.name.end_with?('-AppStore') && config.name != 'Release' && config.name != 'Debug'
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = ['$(inherited)', 'TPL_LOGS_ENABLED=1', 'MT_LOGS_ENABLED=1', 'TL_LOGS_ENABLED=1',
                                                                         'TPDMESSAGINGKIT_LOGS_ENABLED=1']
            end

            config.build_settings['ENABLE_BITCODE'] = 'NO'
            config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = ['$(inherited)', '$(FRAMEWORK_SEARCH_PATHS)', '$(CONFIGURATION_BUILD_DIR)']

            if 'FMDB' == target.name
                config.build_settings['HEADER_SEARCH_PATHS'] = ['$(inherited)', '${PODS_ROOT}/SQLCipher']
            end

            # workaround for xCode 12 (target iOS = 8 is not supported anymore)
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = minimum_deployment_target
        end
    end

    installer.pods_project.build_configurations.each do |config|
        config.build_settings.delete('CODE_SIGNING_ALLOWED')
        config.build_settings.delete('CODE_SIGNING_REQUIRED')
    end

end

plugin 'cocoapods-acknowledgements',
            :settings_bundle => true,
            :exclude => ['DynamicWebRTC', 'TPLKit', 'MTProtoKit', 'TLAPIKit', 'TPDMessagingKit', 'TPDMessagingKit_AppExtension', 
                         'TPDFoundation', 'TPDUIKit', 'TPDUIKit_AppExtension', 'TelepadoPhotoLibrary', 'RSFoundationUtils', 'RSTimeAgo',
                         'RSPagedItemsController'],
            :settings_post_process => Proc.new { |settings_plist_path, umbrella_target|
                require 'colored2'

                has_unaccepted_lines = false
                file_path = "Pods/#{umbrella_target.cocoapods_target_label}-metadata.plist"

                File.open(file_path) do |f|
                    f.each_line do |line|
                        if line =~ /(tpado|Telepado|RishatShamsutdinov)/
                            puts "Unaccepted line: #{line.strip}".red
                            has_unaccepted_lines = true
                        end
                    end
                end

                if has_unaccepted_lines
                    puts "Seems like you didn't exclude private Telepado pods from acknowledgements.".red
                    
                    raise "#{file_path} contains unaccepted lines."
                end
            }

Last updated