diff --git a/build/android/app/build.gradle b/build/android/app/build.gradle index d203b28a..68506c28 100644 --- a/build/android/app/build.gradle +++ b/build/android/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android' android { compileSdkVersion 31 buildToolsVersion '31.0.0' - ndkVersion '23.0.7599858' + ndkVersion '23.1.7779620' defaultConfig { applicationId 'com.multicraft.game' minSdkVersion 19 diff --git a/build/android/native/build.gradle b/build/android/native/build.gradle index 0a27332c..f2290f2c 100644 --- a/build/android/native/build.gradle +++ b/build/android/native/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'de.undercouch.download' android { compileSdkVersion 31 buildToolsVersion '31.0.0' - ndkVersion '23.0.7599858' + ndkVersion '23.1.7779620' defaultConfig { minSdkVersion 19 targetSdkVersion 31 diff --git a/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj b/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj index 2b01947a..74a4fb0e 100644 --- a/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj +++ b/build/iOS/MultiCraft/MultiCraft.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ @@ -34,18 +34,20 @@ 4B35A9F11EEE014F00274961 /* l_storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B35A9EF1EEE014F00274961 /* l_storage.cpp */; }; 4B35A9F41EEE017000274961 /* scripting_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B35A9F21EEE017000274961 /* scripting_client.cpp */; }; 4B35A9F71EEE018D00274961 /* scripting_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B35A9F51EEE018D00274961 /* scripting_server.cpp */; }; - 842A808C2339174C00A89418 /* ads.mm in Sources */ = {isa = PBXBuildFile; fileRef = 842A808B2339174C00A89418 /* ads.mm */; }; + 842A808C2339174C00A89418 /* ads.m in Sources */ = {isa = PBXBuildFile; fileRef = 842A808B2339174C00A89418 /* ads.m */; }; + 843F4C3126617D0D005277FA /* ZipArchive in Frameworks */ = {isa = PBXBuildFile; productRef = 843F4C3026617D0D005277FA /* ZipArchive */; }; 8465A76522A7D4500095B7CA /* libintl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8465A76422A7D4500095B7CA /* libintl.cpp */; }; 8473ED8125C055F80053293B /* static_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8473ED7F25C055F80053293B /* static_text.cpp */; }; 8473ED8425C0562C0053293B /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 8473ED8225C0562C0053293B /* lutf8lib.c */; }; 849C4F86209656D3005EB041 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 849C4F85209656D2005EB041 /* ru.lproj */; }; 84A4380425535BA5002571D4 /* soft_oal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84A4380325535BA5002571D4 /* soft_oal.framework */; }; 84A4380525535BA5002571D4 /* soft_oal.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84A4380325535BA5002571D4 /* soft_oal.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 84A608A425F0A02900D79FCD /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 84A608A325F0A02900D79FCD /* Sentry */; }; 84B9C11724A4D82400016BCE /* ConsentAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B9C11524A4D82400016BCE /* ConsentAlertViewController.swift */; }; 84B9C11824A4D82400016BCE /* ConsentAlertViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B9C11624A4D82400016BCE /* ConsentAlertViewController.xib */; }; - 84C0FB1B24B35D9200606FAA /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 84C0FB1A24B35D9200606FAA /* Bugsnag */; }; 84C32A3724AF7A4500445E92 /* Nantes in Frameworks */ = {isa = PBXBuildFile; productRef = 84C32A3624AF7A4500445E92 /* Nantes */; }; 84C32A3924AF7DDE00445E92 /* UITextViewPlaceholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C32A3824AF7DDE00445E92 /* UITextViewPlaceholder.swift */; }; + 84C67B1E25D5E06B002E2735 /* AppTrackingTransparency.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C67B1D25D5E06B002E2735 /* AppTrackingTransparency.framework */; }; 84CD4A64248782720019B81D /* MainWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD4A59248782720019B81D /* MainWindow.swift */; }; 84CD4A65248782720019B81D /* ProgressViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84CD4A5B248782720019B81D /* ProgressViewController.xib */; }; 84CD4A66248782720019B81D /* MessageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84CD4A5C248782720019B81D /* MessageViewController.xib */; }; @@ -53,6 +55,8 @@ 84CD4A68248782720019B81D /* MessageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD4A5E248782720019B81D /* MessageViewController.swift */; }; 84CD4A69248782720019B81D /* ProgressViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD4A5F248782720019B81D /* ProgressViewController.swift */; }; 84CD4A6C2487A0180019B81D /* ZipManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CD4A6B2487A0170019B81D /* ZipManager.swift */; }; + 84E2968925E29004000C495A /* libluajit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E2968825E28FF6000C495A /* libluajit.a */; }; + 84E2968C25E2A10F000C495A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84E2968E25E2A10F000C495A /* InfoPlist.strings */; }; 84FE40E224439C2F008E29DB /* libcurl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FE40E124439C2F008E29DB /* libcurl.a */; }; 8E0FFE3234B35EC9603EC82A /* Pods_MultiCraft.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73B0001862274A8FCC7614F0 /* Pods_MultiCraft.framework */; }; F87DC8BA210887C700393B64 /* mapgen_v7p.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F87DC8B9210887C700393B64 /* mapgen_v7p.cpp */; }; @@ -306,7 +310,7 @@ 73B0001862274A8FCC7614F0 /* Pods_MultiCraft.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MultiCraft.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 840E2F9E233410F90088E7F7 /* SDVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDVersion.h; path = SDVersion/SDVersion.h; sourceTree = ""; }; 842A808A2339174B00A89418 /* ads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ads.h; path = Ads/ads.h; sourceTree = ""; }; - 842A808B2339174C00A89418 /* ads.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ads.mm; path = Ads/ads.mm; sourceTree = ""; }; + 842A808B2339174C00A89418 /* ads.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ads.m; path = Ads/ads.m; sourceTree = ""; }; 8465A76122A7D4500095B7CA /* MessageCatalog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = MessageCatalog.hpp; path = ../../../../lib/intl/MessageCatalog.hpp; sourceTree = ""; }; 8465A76222A7D4500095B7CA /* libintl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libintl.h; path = ../../../../lib/intl/libintl.h; sourceTree = ""; }; 8465A76322A7D4500095B7CA /* Util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Util.hpp; path = ../../../../lib/intl/Util.hpp; sourceTree = ""; }; @@ -320,6 +324,7 @@ 84B9C11524A4D82400016BCE /* ConsentAlertViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsentAlertViewController.swift; sourceTree = ""; }; 84B9C11624A4D82400016BCE /* ConsentAlertViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConsentAlertViewController.xib; sourceTree = ""; }; 84C32A3824AF7DDE00445E92 /* UITextViewPlaceholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITextViewPlaceholder.swift; sourceTree = ""; }; + 84C67B1D25D5E06B002E2735 /* AppTrackingTransparency.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppTrackingTransparency.framework; path = System/Library/Frameworks/AppTrackingTransparency.framework; sourceTree = SDKROOT; }; 84CD4A55248781420019B81D /* Bridge-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bridge-Header.h"; sourceTree = ""; }; 84CD4A59248782720019B81D /* MainWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainWindow.swift; sourceTree = ""; }; 84CD4A5B248782720019B81D /* ProgressViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProgressViewController.xib; sourceTree = ""; }; @@ -328,6 +333,9 @@ 84CD4A5E248782720019B81D /* MessageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageViewController.swift; sourceTree = ""; }; 84CD4A5F248782720019B81D /* ProgressViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressViewController.swift; sourceTree = ""; }; 84CD4A6B2487A0170019B81D /* ZipManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZipManager.swift; sourceTree = ""; }; + 84E2968825E28FF6000C495A /* libluajit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libluajit.a; path = ../deps/luajit/lib/libluajit.a; sourceTree = ""; }; + 84E2968D25E2A10F000C495A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 84E2968F25E2A164000C495A /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; 84FE40E124439C2F008E29DB /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = ../deps/libcurl/lib/libcurl.a; sourceTree = ""; }; F87DC8B8210887C600393B64 /* mapgen_v7p.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mapgen_v7p.h; path = ../../../../src/mapgen_v7p.h; sourceTree = ""; }; F87DC8B9210887C700393B64 /* mapgen_v7p.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mapgen_v7p.cpp; path = ../../../../src/mapgen_v7p.cpp; sourceTree = ""; }; @@ -335,7 +343,7 @@ F8E6C4E81DCA3B7900F64426 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; F8E6C4EB1DCA3B7900F64426 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; F8E6C4ED1DCA3B7900F64426 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F8E6C4F31DCA3EA400F64426 /* ioswrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioswrap.h; sourceTree = ""; }; + F8E6C4F31DCA3EA400F64426 /* ioswrap.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc.preprocessed; fileEncoding = 4; path = ioswrap.h; sourceTree = ""; }; F8E6C4F41DCA3EA400F64426 /* ioswrap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ioswrap.m; sourceTree = ""; }; F8E6C4F71DCA3F9900F64426 /* activeobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = activeobject.h; path = ../../../../src/activeobject.h; sourceTree = ""; }; F8E6C4F81DCA3F9900F64426 /* ban.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ban.cpp; path = ../../../../src/ban.cpp; sourceTree = ""; }; @@ -726,17 +734,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 84C0FB1B24B35D9200606FAA /* Bugsnag in Frameworks */, F8E6C7CD1DCA431B00F64426 /* Foundation.framework in Frameworks */, 84FE40E224439C2F008E29DB /* libcurl.a in Frameworks */, F8E6C7D71DCA477600F64426 /* libfreetype.a in Frameworks */, F8E6C7D51DCA476800F64426 /* libIrrlicht.a in Frameworks */, + 84A608A425F0A02900D79FCD /* Sentry in Frameworks */, + 843F4C3126617D0D005277FA /* ZipArchive in Frameworks */, 84C32A3724AF7A4500445E92 /* Nantes in Frameworks */, F8E6C7C91DCA430300F64426 /* OpenGLES.framework in Frameworks */, 8E0FFE3234B35EC9603EC82A /* Pods_MultiCraft.framework in Frameworks */, F8E6C7C51DCA42F300F64426 /* QuartzCore.framework in Frameworks */, + 84C67B1E25D5E06B002E2735 /* AppTrackingTransparency.framework in Frameworks */, 84A4380425535BA5002571D4 /* soft_oal.framework in Frameworks */, F8E6C7C71DCA42FA00F64426 /* UIKit.framework in Frameworks */, + 84E2968925E29004000C495A /* libluajit.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -840,6 +851,7 @@ F8E6C4E81DCA3B7900F64426 /* Assets.xcassets */, F8E6C4EA1DCA3B7900F64426 /* LaunchScreen.storyboard */, F8E6C4ED1DCA3B7900F64426 /* Info.plist */, + 84E2968E25E2A10F000C495A /* InfoPlist.strings */, F8E6C4DC1DCA3B7900F64426 /* Supporting Files */, F8E6C4F61DCA3EAF00F64426 /* src */, ); @@ -856,7 +868,7 @@ F8E6C4F41DCA3EA400F64426 /* ioswrap.m */, 840E2F9E233410F90088E7F7 /* SDVersion.h */, 842A808A2339174B00A89418 /* ads.h */, - 842A808B2339174C00A89418 /* ads.mm */, + 842A808B2339174C00A89418 /* ads.m */, F8E6C7E01DCA4EB300F64426 /* assets.zip */, ); name = "Supporting Files"; @@ -1379,6 +1391,8 @@ F8E6C7C31DCA42F300F64426 /* Frameworks */ = { isa = PBXGroup; children = ( + 84E2968825E28FF6000C495A /* libluajit.a */, + 84C67B1D25D5E06B002E2735 /* AppTrackingTransparency.framework */, 84FE40E124439C2F008E29DB /* libcurl.a */, F8E6C7D61DCA477600F64426 /* libfreetype.a */, F8E6C7D41DCA476800F64426 /* libIrrlicht.a */, @@ -1404,10 +1418,10 @@ F8E6C4D51DCA3B7900F64426 /* Sources */, F8E6C4D61DCA3B7900F64426 /* Frameworks */, F8E6C4D71DCA3B7900F64426 /* Resources */, - E156912616D2E9233FC1C9F4 /* [CP] Copy Pods Resources */, 7055146ABE25F98BDC1A6400 /* [CP] Embed Pods Frameworks */, - 4EB364AA68EABAF7EBC092CB /* Upload Bugsnag dSYM */, 84A4380625535BA5002571D4 /* Embed Frameworks */, + 84F1E21825F0B70500A731AE /* Upload Sentry */, + A91BBBFDFB91D0CBDAABCA4E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1416,7 +1430,8 @@ name = MultiCraft; packageProductDependencies = ( 84C32A3624AF7A4500445E92 /* Nantes */, - 84C0FB1A24B35D9200606FAA /* Bugsnag */, + 84A608A325F0A02900D79FCD /* Sentry */, + 843F4C3026617D0D005277FA /* ZipArchive */, ); productName = MultiCraft; productReference = F8E6C4D91DCA3B7900F64426 /* MultiCraft.app */; @@ -1429,7 +1444,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1210; + LastUpgradeCheck = 1250; ORGANIZATIONNAME = MultiCraft; TargetAttributes = { F8E6C4D81DCA3B7900F64426 = { @@ -1444,17 +1459,19 @@ }; }; buildConfigurationList = F8E6C4D41DCA3B7900F64426 /* Build configuration list for PBXProject "MultiCraft" */; - compatibilityVersion = "Xcode 12.0"; + compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, + ru, ); mainGroup = F8E6C4D01DCA3B7900F64426; packageReferences = ( 84C32A3524AF7A4500445E92 /* XCRemoteSwiftPackageReference "Nantes" */, - 84C0FB1924B35D9200606FAA /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, + 84A608A225F0A02900D79FCD /* XCRemoteSwiftPackageReference "sentry-cocoa" */, + 843F4C2F26617D0D005277FA /* XCRemoteSwiftPackageReference "ZipArchive" */, ); productRefGroup = F8E6C4DA1DCA3B7900F64426 /* Products */; projectDirPath = ""; @@ -1476,6 +1493,7 @@ F8E6C7E11DCA4EB300F64426 /* assets.zip in Resources */, 84B9C11824A4D82400016BCE /* ConsentAlertViewController.xib in Resources */, 84CD4A65248782720019B81D /* ProgressViewController.xib in Resources */, + 84E2968C25E2A10F000C495A /* InfoPlist.strings in Resources */, 84CD4A66248782720019B81D /* MessageViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1483,25 +1501,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 4EB364AA68EABAF7EBC092CB /* Upload Bugsnag dSYM */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Upload Bugsnag dSYM"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = "/usr/bin/env ruby"; - shellScript = "# First, attempt to get the API key from an environment variable\napi_key = ENV[\"BUGSNAG_API_KEY\"]\n\n# If not present, attempt to lookup the value from the Info.plist\nif !api_key\n default_info_plist_location = Dir.glob(\"./{ios/,}*/Info.plist\").reject {|path| path =~ /build|test/i }\n plist_buddy_response = `/usr/libexec/PlistBuddy -c \"print :BugsnagAPIKey\" \"#{default_info_plist_location.first}\"`\n api_key = plist_buddy_response if $?.success?\nend\n\nfork do\n Process.setsid\n STDIN.reopen(\"/dev/null\")\n STDOUT.reopen(\"/dev/null\", \"a\")\n STDERR.reopen(\"/dev/null\", \"a\")\n\n require 'shellwords'\n\n Dir[\"#{ENV[\"DWARF_DSYM_FOLDER_PATH\"]}/*/Contents/Resources/DWARF/*\"].each do |dsym|\n curl_command = \"curl -F dsym=@#{Shellwords.escape(dsym)} -F projectRoot=#{Shellwords.escape(ENV[\"PROJECT_DIR\"])} \"\n curl_command += \"-F apiKey=#{Shellwords.escape(api_key)} \" if api_key\n curl_command += \"https://upload.bugsnag.com/\"\n system(curl_command)\n end\nend\n"; - showEnvVarsInLog = 0; - }; 7055146ABE25F98BDC1A6400 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1519,6 +1518,38 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 84F1E21825F0B70500A731AE /* Upload Sentry */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + ); + name = "Upload Sentry"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which sentry-cli >/dev/null; then\nexport SENTRY_ORG=multicraft\nexport SENTRY_PROJECT=multicraft-ios\nexport SENTRY_AUTH_TOKEN=8343341b264d4dc5aadfaac4b3927ad6402ed898b8b340a380ac506b432677aa\nERROR=$(sentry-cli upload-dif \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; + }; + A91BBBFDFB91D0CBDAABCA4E /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; C73312165F97B96FC254B124 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1537,23 +1568,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E156912616D2E9233FC1C9F4 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MultiCraft/Pods-MultiCraft-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1576,7 +1590,7 @@ 4B35A9B31EEDD16C00274961 /* database-files.cpp in Sources */, F8E6C64E1DCA3F9900F64426 /* rollback_interface.cpp in Sources */, 4B35A9F71EEE018D00274961 /* scripting_server.cpp in Sources */, - 842A808C2339174C00A89418 /* ads.mm in Sources */, + 842A808C2339174C00A89418 /* ads.m in Sources */, F8E6C6441DCA3F9900F64426 /* noise.cpp in Sources */, F8E6C7BB1DCA428800F64426 /* numeric.cpp in Sources */, 4B35A9B91EEDD1AC00274961 /* itemstackmetadata.cpp in Sources */, @@ -1776,6 +1790,15 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + 84E2968E25E2A10F000C495A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 84E2968D25E2A10F000C495A /* en */, + 84E2968F25E2A164000C495A /* ru */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; F8E6C4EA1DCA3B7900F64426 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -1783,6 +1806,8 @@ ); name = LaunchScreen.storyboard; sourceTree = ""; + tabWidth = 4; + usesTabs = 1; }; /* End PBXVariantGroup section */ @@ -1790,6 +1815,7 @@ F8E6C4EE1DCA3B7900F64426 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -1808,7 +1834,7 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_UNROLL_LOOPS = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; STRIP_PNG_TEXT = NO; @@ -1820,6 +1846,7 @@ F8E6C4EF1DCA3B7900F64426 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -1837,7 +1864,7 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_UNROLL_LOOPS = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LLVM_LTO = YES; SDKROOT = iphoneos; STRIP_PNG_TEXT = NO; @@ -1854,7 +1881,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 117; + CURRENT_PROJECT_VERSION = 137; DEVELOPMENT_TEAM = R3RLJ9TW52; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", @@ -1870,15 +1897,18 @@ "HAVE_TOUCHSCREENGUI=1", "ENABLE_GLES=1", ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", "${SRCROOT}/../../../src", "${SRCROOT}/../../../src/script", + "${SRCROOT}/../../../lib/gmp", + "${SRCROOT}/../../../lib/intl", "${SRCROOT}/../../../lib/jsoncpp", "${SRCROOT}/../deps/freetype/include/freetype2", - "${SRCROOT}/../../../lib/intl", "${SRCROOT}/../deps/irrlicht/include", "${SRCROOT}/../deps/libcurl/include", + "${SRCROOT}/../deps/luajit/include", ); INFOPLIST_FILE = MultiCraft/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -1886,13 +1916,9 @@ "@executable_path/Frameworks", ); LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 1.15.2; + MARKETING_VERSION = 1.17.0; OTHER_CFLAGS = ( "$(inherited)", - "-isystem", - "\"${PODS_ROOT}/Headers/Public\"", - "-isystem", - "\"${PODS_ROOT}/Headers/Public/SSZipArchive\"", "-fvisibility=hidden", "-fdata-sections", "-ffunction-sections", @@ -1905,6 +1931,7 @@ "-L${SRCROOT}/../deps/freetype/lib", "-L${SRCROOT}/../deps/irrlicht", "-L${SRCROOT}/../deps/libcurl/lib", + "-L${SRCROOT}/../deps/luajit/lib", "-Wl,-dead_strip", ); OTHER_SWIFT_FLAGS = "$(inherited) -DDEBUG"; @@ -1920,7 +1947,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 117; + CURRENT_PROJECT_VERSION = 137; DEVELOPMENT_TEAM = R3RLJ9TW52; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", @@ -1937,15 +1964,18 @@ "HAVE_TOUCHSCREENGUI=1", "ENABLE_GLES=1", ); + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", "${SRCROOT}/../../../src", "${SRCROOT}/../../../src/script", + "${SRCROOT}/../../../lib/gmp", + "${SRCROOT}/../../../lib/intl", "${SRCROOT}/../../../lib/jsoncpp", "${SRCROOT}/../deps/freetype/include/freetype2", - "${SRCROOT}/../../../lib/intl", "${SRCROOT}/../deps/irrlicht/include", "${SRCROOT}/../deps/libcurl/include", + "${SRCROOT}/../deps/luajit/include", ); INFOPLIST_FILE = MultiCraft/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -1953,13 +1983,9 @@ "@executable_path/Frameworks", ); LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 1.15.2; + MARKETING_VERSION = 1.17.0; OTHER_CFLAGS = ( "$(inherited)", - "-isystem", - "\"${PODS_ROOT}/Headers/Public\"", - "-isystem", - "\"${PODS_ROOT}/Headers/Public/SSZipArchive\"", "-fvisibility=hidden", "-fdata-sections", "-ffunction-sections", @@ -1972,6 +1998,7 @@ "-L${SRCROOT}/../deps/freetype/lib", "-L${SRCROOT}/../deps/irrlicht", "-L${SRCROOT}/../deps/libcurl/lib", + "-L${SRCROOT}/../deps/luajit/lib", "-Wl,-dead_strip", ); PRODUCT_BUNDLE_IDENTIFIER = mobi.MultiCraft; @@ -2004,12 +2031,20 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 84C0FB1924B35D9200606FAA /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { + 843F4C2F26617D0D005277FA /* XCRemoteSwiftPackageReference "ZipArchive" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; + repositoryURL = "https://github.com/ZipArchive/ZipArchive"; requirement = { - kind = upToNextMinorVersion; - minimumVersion = 6.6.0; + kind = upToNextMajorVersion; + minimumVersion = 2.4.0; + }; + }; + 84A608A225F0A02900D79FCD /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/getsentry/sentry-cocoa"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 7.5.0; }; }; 84C32A3524AF7A4500445E92 /* XCRemoteSwiftPackageReference "Nantes" */ = { @@ -2023,10 +2058,15 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 84C0FB1A24B35D9200606FAA /* Bugsnag */ = { + 843F4C3026617D0D005277FA /* ZipArchive */ = { isa = XCSwiftPackageProductDependency; - package = 84C0FB1924B35D9200606FAA /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; - productName = Bugsnag; + package = 843F4C2F26617D0D005277FA /* XCRemoteSwiftPackageReference "ZipArchive" */; + productName = ZipArchive; + }; + 84A608A325F0A02900D79FCD /* Sentry */ = { + isa = XCSwiftPackageProductDependency; + package = 84A608A225F0A02900D79FCD /* XCRemoteSwiftPackageReference "sentry-cocoa" */; + productName = Sentry; }; 84C32A3624AF7A4500445E92 /* Nantes */ = { isa = XCSwiftPackageProductDependency; diff --git a/build/iOS/MultiCraft/MultiCraft/Ads/ads.m b/build/iOS/MultiCraft/MultiCraft/Ads/ads.m new file mode 100644 index 00000000..e69de29b diff --git a/build/iOS/MultiCraft/MultiCraft/Ads/ads.mm b/build/iOS/MultiCraft/MultiCraft/Ads/ads.mm deleted file mode 100644 index 8b137891..00000000 --- a/build/iOS/MultiCraft/MultiCraft/Ads/ads.mm +++ /dev/null @@ -1 +0,0 @@ - diff --git a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/AppIcon.appiconset/AppStore.jpg b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/AppIcon.appiconset/AppStore.jpg index 0fc97d6a..b418924b 100644 Binary files a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/AppIcon.appiconset/AppStore.jpg and b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/AppIcon.appiconset/AppStore.jpg differ diff --git a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/Contents.json b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/Contents.json index 0fd78f12..39e8ea67 100644 --- a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/Contents.json +++ b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/Contents.json @@ -11,9 +11,9 @@ "top" : 0 }, "center" : { - "height" : 64, + "height" : 128, "mode" : "tile", - "width" : 64 + "width" : 128 }, "mode" : "9-part" } diff --git a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/bg.png b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/bg.png index 55afbb6f..84f1fd4c 100644 Binary files a/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/bg.png and b/build/iOS/MultiCraft/MultiCraft/Assets.xcassets/icon_bg.imageset/bg.png differ diff --git a/build/iOS/MultiCraft/MultiCraft/Base.lproj/LaunchScreen.storyboard b/build/iOS/MultiCraft/MultiCraft/Base.lproj/LaunchScreen.storyboard index f13e328d..73fa9b14 100644 --- a/build/iOS/MultiCraft/MultiCraft/Base.lproj/LaunchScreen.storyboard +++ b/build/iOS/MultiCraft/MultiCraft/Base.lproj/LaunchScreen.storyboard @@ -1,9 +1,9 @@ - - + + - + @@ -16,11 +16,11 @@ - + - - + + @@ -38,6 +38,6 @@ - + diff --git a/build/iOS/MultiCraft/MultiCraft/Info.plist b/build/iOS/MultiCraft/MultiCraft/Info.plist index 4c581914..d92a6592 100755 --- a/build/iOS/MultiCraft/MultiCraft/Info.plist +++ b/build/iOS/MultiCraft/MultiCraft/Info.plist @@ -342,10 +342,5 @@ UIViewControllerBasedStatusBarAppearance - bugsnag - - apiKey - 1 - diff --git a/build/iOS/MultiCraft/MultiCraft/Main/ZipManager.swift b/build/iOS/MultiCraft/MultiCraft/Main/ZipManager.swift index 6615b3af..c828eaff 100644 --- a/build/iOS/MultiCraft/MultiCraft/Main/ZipManager.swift +++ b/build/iOS/MultiCraft/MultiCraft/Main/ZipManager.swift @@ -1,6 +1,6 @@ import Foundation -import SSZipArchive -import Bugsnag +import ZipArchive +import Sentry private enum Constants { static let percentProgressIndex: Int = 0 @@ -54,7 +54,7 @@ final class VersionManager { do { try content.write(toFile: filename, atomically: false, encoding: .ascii) } catch { - Bugsnag.notifyError(error) + SentrySDK.capture(error: error) } } } @@ -99,10 +99,9 @@ private extension ZipManager { SSZipArchive.unzipFile(atPath: path, toDestination: destination, overwrite: true, password: ZIPPWD, progressHandler: { (file, zipInfo, progress, total) in block(progress * 100 / total) - }) { (path, success, error) in if let error = error { - Bugsnag.notifyError(error) + SentrySDK.capture(error: error) errorBlock(error) } else { block(100) diff --git a/build/iOS/MultiCraft/MultiCraft/SDVersion/SDVersion.h b/build/iOS/MultiCraft/MultiCraft/SDVersion/SDVersion.h index f9f439b3..47f2f58d 100755 --- a/build/iOS/MultiCraft/MultiCraft/SDVersion/SDVersion.h +++ b/build/iOS/MultiCraft/MultiCraft/SDVersion/SDVersion.h @@ -40,6 +40,10 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ iPhone12 = 123, iPhone12Pro = 124, iPhone12ProMax = 125, + iPhone13Mini = 122, + iPhone13 = 123, + iPhone13Pro = 124, + iPhone13ProMax = 125, // iPad iPadAir = 205, @@ -56,6 +60,7 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ iPadPro11Inch = 216, iPadPro12Dot9Inch3Gen = 217, iPadMini5 = 218, + iPadMini6 = 219, iPadAir3 = 219, iPad7 = 220, iPadPro11Inch2Gen = 216, @@ -114,6 +119,10 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ @"iPhone13,2" : @(iPhone12), @"iPhone13,3" : @(iPhone12Pro), @"iPhone13,4" : @(iPhone12ProMax), + @"iPhone14,4" : @(iPhone13Mini), + @"iPhone14,5" : @(iPhone13), + @"iPhone14,2" : @(iPhone13Pro), + @"iPhone14,3" : @(iPhone13ProMax), // iPad @"iPad6,11" : @(iPad5), @@ -145,6 +154,8 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ @"iPad5,2" : @(iPadMini4), @"iPad11,1" : @(iPadMini5), @"iPad11,2" : @(iPadMini5), + @"iPad14,1" : @(iPadMini6), + @"iPad14,2" : @(iPadMini6), @"iPad6,3" : @(iPadPro9Dot7Inch), @"iPad6,4" : @(iPadPro9Dot7Inch), @@ -189,17 +200,18 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ #define SDVersion4and7Inch (([SDVersion deviceVersion] == iPhone6) || ([SDVersion deviceVersion] == iPhone6S) || ([SDVersion deviceVersion] == iPhone7) || ([SDVersion deviceVersion] == iPhone8) || ([SDVersion deviceVersion] == iPhoneSE2Gen)) -#define SDVersion5and5Inch (([SDVersion deviceVersion] == iPhone6Plus) || ([SDVersion deviceVersion] == iPhone6SPlus) || ([SDVersion deviceVersion] == iPhone7Plus) || ([SDVersion deviceVersion] == iPhone8Plus) | ([SDVersion deviceVersion] == iPhone12Mini)) +#define SDVersion5and5Inch (([SDVersion deviceVersion] == iPhone6Plus) || ([SDVersion deviceVersion] == iPhone6SPlus) || ([SDVersion deviceVersion] == iPhone7Plus) || ([SDVersion deviceVersion] == iPhone8Plus) || ([SDVersion deviceVersion] == iPhone12Mini) || ([SDVersion deviceVersion] == iPhone13Mini)) #define SDVersion5and8Inch (([SDVersion deviceVersion] == iPhoneX) || ([SDVersion deviceVersion] == iPhoneXS) || ([SDVersion deviceVersion] == iPhone11Pro)) -#define SDVersion6and1Inch (([SDVersion deviceVersion] == iPhoneXR) || ([SDVersion deviceVersion] == iPhone11) | ([SDVersion deviceVersion] == iPhone12) | ([SDVersion deviceVersion] == iPhone12Pro)) +#define SDVersion6and1Inch (([SDVersion deviceVersion] == iPhoneXR) || ([SDVersion deviceVersion] == iPhone11) || ([SDVersion deviceVersion] == iPhone12) || ([SDVersion deviceVersion] == iPhone12Pro) || ([SDVersion deviceVersion] == iPhone13) || ([SDVersion deviceVersion] == iPhone13Pro)) -#define SDVersion6and5Inch (([SDVersion deviceVersion] == iPhoneXSMax) || ([SDVersion deviceVersion] == iPhone11ProMax) | ([SDVersion deviceVersion] == iPhone12ProMax)) +#define SDVersion6and5Inch (([SDVersion deviceVersion] == iPhoneXSMax) || ([SDVersion deviceVersion] == iPhone11ProMax) || ([SDVersion deviceVersion] == iPhone12ProMax) || ([SDVersion deviceVersion] == iPhone13ProMax)) -#define SDVersion7and9Inch (([SDVersion deviceVersion] == iPadMini2) | ([SDVersion deviceVersion] == iPadMini3) | ([SDVersion deviceVersion] == iPadMini4) | ([SDVersion deviceVersion] == iPadMini5)) +#define SDVersion7and9Inch (([SDVersion deviceVersion] == iPadMini2) || ([SDVersion deviceVersion] == iPadMini3) || ([SDVersion deviceVersion] == iPadMini4) || ([SDVersion deviceVersion] == iPadMini5) || ([SDVersion deviceVersion] == iPadMini6)) -#define SDVersioniPhone12Series (([SDVersion deviceVersion] == iPhone12Mini) | ([SDVersion deviceVersion] == iPhone12Mini) | ([SDVersion deviceVersion] == iPhone12Pro) | ([SDVersion deviceVersion] == iPhone12ProMax)) +#define SDVersioniPhone12Series (([SDVersion deviceVersion] == iPhone12Mini) || ([SDVersion deviceVersion] == iPhone12) || ([SDVersion deviceVersion] == iPhone12Pro) || ([SDVersion deviceVersion] == iPhone12ProMax) || \ + ([SDVersion deviceVersion] == iPhone13Mini) || ([SDVersion deviceVersion] == iPhone13) || ([SDVersion deviceVersion] == iPhone13Pro) || ([SDVersion deviceVersion] == iPhone13ProMax)) //#define SDVersion11Inch (([SDVersion deviceVersion] == iPadPro11Inch) || ([SDVersion deviceVersion] == iPadPro11Inch2Gen) || ([SDVersion deviceVersion] == iPadAir4)) diff --git a/build/iOS/MultiCraft/MultiCraft/en.lproj/InfoPlist.strings b/build/iOS/MultiCraft/MultiCraft/en.lproj/InfoPlist.strings index 6524a34c..aeec2f7f 100644 --- a/build/iOS/MultiCraft/MultiCraft/en.lproj/InfoPlist.strings +++ b/build/iOS/MultiCraft/MultiCraft/en.lproj/InfoPlist.strings @@ -1 +1 @@ -NSUserTrackingUsageDescription = "This identifier will be used to deliver personalized ads to you."; +NSUserTrackingUsageDescription = "Your data will be used to provide you a better and personalized ad experience."; diff --git a/build/iOS/MultiCraft/MultiCraft/ioswrap.h b/build/iOS/MultiCraft/MultiCraft/ioswrap.h index 20f8d928..c5ca9aba 100755 --- a/build/iOS/MultiCraft/MultiCraft/ioswrap.h +++ b/build/iOS/MultiCraft/MultiCraft/ioswrap.h @@ -1,7 +1,6 @@ #pragma once -#if 0 -#define ADS +#ifdef OFFICIAL #import "ads.h" #else #define ZIPPWD @"1" // zip password @@ -17,6 +16,8 @@ enum { PATH_LIBRARY_CACHE, }; +void ioswrap_init(); + void ioswrap_paths(int type, char *dest, size_t destlen); void ioswrap_assets(void); // extracts assets.zip to PATH_LIBRARY_SUPPORT @@ -26,7 +27,13 @@ float ioswrap_scale(); void ioswrap_show_dialog(void *uiviewcontroller, const char *accept, const char *hint, const char *current, int type); int ioswrap_get_dialog(const char **text); -void init_IOS_Settings(); +void ioswrap_init_viewc(void *uiviewcontroller); + +void ioswrap_events(int event); +void ioswrap_server_connect(bool multiplayer); +void ioswrap_exit_game(); + +void ioswrap_open_url(const char *url); #ifdef __cplusplus } diff --git a/build/iOS/MultiCraft/MultiCraft/ioswrap.m b/build/iOS/MultiCraft/MultiCraft/ioswrap.m index 30034d30..35a3fde0 100644 --- a/build/iOS/MultiCraft/MultiCraft/ioswrap.m +++ b/build/iOS/MultiCraft/MultiCraft/ioswrap.m @@ -1,18 +1,30 @@ -#import -#import "ioswrap.h" +@import AVFoundation; +@import Foundation; +@import Sentry; -#import -#import +#import "ioswrap.h" #import +#ifdef OFFICIAL +#import "ads.h" +#endif + +static UIViewController *viewc; + /* Initialization iOS Specific Things */ -void init_IOS_Settings() +void ioswrap_init() { - BugsnagConfiguration *config = [BugsnagConfiguration loadConfig]; - config.enabledErrorTypes.ooms = NO; - [Bugsnag startWithConfiguration:config]; // crash analytics +#ifndef OFFICIAL + NSString *SentryDSN = @"https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557"; +#endif + [SentrySDK startWithConfigureOptions:^(SentryOptions *options) { + options.dsn = SentryDSN; + options.enableOutOfMemoryTracking = NO; + }]; // crash analytics [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; // don't stop background music + + [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; // disable screen off timeout } /* Get Path for Assets */ @@ -38,7 +50,6 @@ void ioswrap_paths(int type, char *dest, size_t destlen) snprintf(dest, destlen, "%s/Caches", path_c); } - /* Unzip Assets */ void ioswrap_assets() { @@ -130,3 +141,51 @@ int ioswrap_get_dialog(const char **text) return ret; } + +void ioswrap_init_viewc(void *uiviewcontroller) +{ + viewc = (__bridge UIViewController *) uiviewcontroller; + +#ifdef OFFICIAL + initUpdateManager(uiviewcontroller); +#endif +} + +/* Events */ +void ioswrap_events(int event) +{ +// EAET_WILL_RESUME 0 +// EAET_DID_RESUME 1 +// EAET_WILL_PAUSE 2 +// EAET_DID_PAUSE 3 +// EAET_WILL_TERMINATE 4 +// EAET_MEMORY_WARNING 5 + + NSLog(@"[EVENT] got event – #%d", event); +} + +void ioswrap_server_connect(bool multiplayer) +{ + NSLog(@"[EVENT] got event – server connect, mode: %s", multiplayer ? "MP" : "SP"); + +#ifdef OFFICIAL + adsServerConnect(multiplayer); +#endif +} + +void ioswrap_exit_game() +{ + NSLog(@"[EVENT] got event – exit to menu"); + +#ifdef OFFICIAL + adsExitGame(); +#endif +} + +void ioswrap_open_url(const char *url) +{ + NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithUTF8String:url]]; + UIApplication *application = UIApplication.sharedApplication; + if ([application canOpenURL:appStoreURL]) + [application openURL:appStoreURL options:@{} completionHandler:nil]; +} diff --git a/build/iOS/MultiCraft/MultiCraft/ru.lproj/InfoPlist.strings b/build/iOS/MultiCraft/MultiCraft/ru.lproj/InfoPlist.strings index f92f4f33..8f05865f 100644 --- a/build/iOS/MultiCraft/MultiCraft/ru.lproj/InfoPlist.strings +++ b/build/iOS/MultiCraft/MultiCraft/ru.lproj/InfoPlist.strings @@ -1 +1 @@ -NSUserTrackingUsageDescription = "Этот идентификатор будет использоваться для персонализации показываемой вам рекламы."; +NSUserTrackingUsageDescription = "Ваши данные будут использоваться, чтобы предоставить вам более интересную и персонализированную рекламу."; diff --git a/build/iOS/Podfile b/build/iOS/Podfile index c9cc4e81..5e5cdb3f 100755 --- a/build/iOS/Podfile +++ b/build/iOS/Podfile @@ -3,7 +3,6 @@ platform :ios, '12.0' use_frameworks! install! 'cocoapods', :warn_for_multiple_pod_sources => false, :warn_for_unused_master_specs_repo => false - def appodeal # source 'https://github.com/appodeal/CocoaPods.git' ver = '2.9.0-Beta' @@ -23,7 +22,6 @@ target 'MultiCraft' do pod 'leveldb-library' pod 'libvorbis' - pod 'SSZipArchive' appodeal end diff --git a/build/iOS/deps/freetype.sh b/build/iOS/deps/freetype.sh index a27f9bac..239c98a5 100755 --- a/build/iOS/deps/freetype.sh +++ b/build/iOS/deps/freetype.sh @@ -1,7 +1,7 @@ #!/bin/bash -e . sdk.sh -FREETYPE_VERSION=2.10.4 +FREETYPE_VERSION=2.11.0 if [ ! -d freetype-src ]; then wget http://download.savannah.gnu.org/releases/freetype/freetype-$FREETYPE_VERSION.tar.gz diff --git a/build/iOS/deps/libcurl.sh b/build/iOS/deps/libcurl.sh index b2c283a2..07255135 100755 --- a/build/iOS/deps/libcurl.sh +++ b/build/iOS/deps/libcurl.sh @@ -1,7 +1,7 @@ #!/bin/bash -e . sdk.sh -CURL_VERSION=7.79.0 +CURL_VERSION=7.79.1 if [ ! -d libcurl-src ]; then wget https://curl.haxx.se/download/curl-$CURL_VERSION.tar.gz diff --git a/src/cguittfont/irrUString.h b/src/cguittfont/irrUString.h index 5b10e236..3d66e19a 100644 --- a/src/cguittfont/irrUString.h +++ b/src/cguittfont/irrUString.h @@ -70,6 +70,8 @@ #include "irrString.h" #include "path.h" +#define _IRR_DEBUG_BREAK_IF IRR_DEBUG_BREAK_IF + //! UTF-16 surrogate start values. static const irr::u16 UTF16_HI_SURROGATE = 0xD800; static const irr::u16 UTF16_LO_SURROGATE = 0xDC00; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index aef2864f..359a2b5d 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -605,9 +605,6 @@ bool ClientLauncher::create_engine_device() #ifdef __IOS__ CIrrDeviceiOS* dev = (CIrrDeviceiOS*) device; porting::setViewController(dev->getViewController()); -#ifdef ADS - ads_startup(dev->getViewController()); -#endif #endif } diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 9c893243..f27a24dc 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -30,8 +30,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting_ios.h" #endif -#if defined(__ANDROID__) || defined(__IOS__) -extern void external_pause_game(); +#if defined(__IOS__) +extern "C" void external_pause_game(); #endif bool MyEventReceiver::OnEvent(const SEvent &event) @@ -72,16 +72,9 @@ bool MyEventReceiver::OnEvent(const SEvent &event) #ifdef __IOS__ if (event.EventType == irr::EET_APPLICATION_EVENT) { int AppEvent = event.ApplicationEvent.EventType; - if (AppEvent == irr::EAET_DID_PAUSE) { + ioswrap_events(AppEvent); + if (AppEvent == irr::EAET_WILL_PAUSE) external_pause_game(); - #ifdef ADS - ads_set_paused(true); - #endif - } - #ifdef ADS - if (AppEvent == irr::EAET_DID_RESUME) - ads_set_paused(false); - #endif return true; } #endif diff --git a/src/config.h b/src/config.h index 87e7e11c..b3d2e895 100644 --- a/src/config.h +++ b/src/config.h @@ -17,8 +17,8 @@ #define PROJECT_NAME_C "MultiCraft" #define STATIC_SHAREDIR "" #define VERSION_MAJOR 1 - #define VERSION_MINOR 15 - #define VERSION_PATCH 6 + #define VERSION_MINOR 17 + #define VERSION_PATCH 0 #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." STR(VERSION_PATCH) #endif diff --git a/src/game.cpp b/src/game.cpp index c00616ce..65694f24 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3191,7 +3191,11 @@ inline void Game::step(f32 *dtime) #if defined(__ANDROID__) || defined(__IOS__) if (g_menumgr.pausesGame()) { runData.pause_game_timer += *dtime; - if (runData.pause_game_timer > 120.0f) { + float disconnect_time = 180.0f; +#ifdef __IOS__ + disconnect_time = simple_singleplayer_mode ? 60.0f : 120.0f; +#endif + if (runData.pause_game_timer > disconnect_time) { g_gamecallback->disconnect(); return; } @@ -4987,7 +4991,7 @@ void the_game(bool *kill, } #if defined(__ANDROID__) || defined(__IOS__) -void external_pause_game() +extern "C" void external_pause_game() { if (!g_game) return; @@ -4996,7 +5000,7 @@ void external_pause_game() #endif #ifdef __IOS__ -void external_statustext(const char *text, float duration) +extern "C" void external_statustext(const char *text, float duration) { if (!g_game) return; diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index 370e471e..1754ddb5 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -323,7 +323,17 @@ void GUIEngine::run() driver->endScene(); +#if defined(__ANDROID__) || defined(__IOS__) + bool keyboardActive; + if (!porting::hasRealKeyboard()) + keyboardActive = m_menu->getAndroidUIInput(); +#endif + u32 frametime_min = 1000 / g_settings->getFloat("pause_fps_max") / 2; +#ifdef __IOS__ + if (keyboardActive) + frametime_min = 1000 / g_settings->getFloat("fps_max"); +#endif if (m_clouds_enabled) cloudPostProcess(); @@ -331,11 +341,6 @@ void GUIEngine::run() sleep_ms(frametime_min); m_script->step(); - -#if defined(__ANDROID__) || defined(__IOS__) - if (!porting::hasRealKeyboard()) - m_menu->getAndroidUIInput(); -#endif } } diff --git a/src/porting.cpp b/src/porting.cpp index 27844b02..3e071e46 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -953,9 +953,14 @@ static bool open_uri(const std::string &uri) openURIAndroid(uri); return true; #elif defined(__APPLE__) +#ifdef __IOS__ + ioswrap_open_url(uri.c_str()); + return true; +#else const char *argv[] = {"open", uri.c_str(), NULL}; return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv, (*_NSGetEnviron())) == 0; +#endif #else const char *argv[] = {"xdg-open", uri.c_str(), NULL}; return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0; diff --git a/src/porting_android.cpp b/src/porting_android.cpp index eef62368..0328f82e 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif extern int main(int argc, char *argv[]); -extern void external_pause_game(); +extern "C" void external_pause_game(); void android_main(android_app *app) { diff --git a/src/porting_ios.cpp b/src/porting_ios.cpp index f95e5d86..36167208 100644 --- a/src/porting_ios.cpp +++ b/src/porting_ios.cpp @@ -1,7 +1,7 @@ /* MultiCraft -Copyright (C) 2014-2020 Maksim Gamarnik [MoNTE48] MoNTE48@mail.ua +Copyright (C) 2014-2021 Maksim Gamarnik [MoNTE48] MoNTE48@mail.ua Copyright (C) 2016-2019 sfan5 This program is free software; you can redistribute it and/or modify @@ -61,6 +61,7 @@ namespace porting { void setViewController(void *v) { uiviewcontroller = v; + ioswrap_init_viewc(v); } void showInputDialog(const std::string &acceptButton, const std::string &hint, @@ -79,22 +80,18 @@ namespace porting { } void notifyServerConnect(bool is_multiplayer) { -#ifdef ADS - ads_allow(!is_multiplayer); -#endif + ioswrap_server_connect(is_multiplayer); } void notifyExitGame() { -#ifdef ADS - ads_allow(true); -#endif + ioswrap_exit_game(); } } extern int real_main(int argc, char *argv[]); void irrlicht_main() { - init_IOS_Settings(); + ioswrap_init(); static const char *args[] = { PROJECT_NAME, }; diff --git a/src/porting_ios.h b/src/porting_ios.h index 519ade35..35fc184e 100644 --- a/src/porting_ios.h +++ b/src/porting_ios.h @@ -1,7 +1,7 @@ /* MultiCraft -Copyright (C) 2014-2020 Maksim Gamarnik [MoNTE48] MoNTE48@mail.ua +Copyright (C) 2014-2021 Maksim Gamarnik [MoNTE48] MoNTE48@mail.ua Copyright (C) 2016-2019 sfan5 This program is free software; you can redistribute it and/or modify diff --git a/src/server.cpp b/src/server.cpp index 15bd0e6f..736cf090 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -100,7 +100,6 @@ void *ServerThread::run() m_server->Receive(); - } catch (con::NoIncomingDataException &e) { } catch (con::PeerNotFoundException &e) { infostream<<"Server: PeerNotFoundException"<guibutton->setVisible(true); + if (m_visible) + m_joystick_btn_off->guibutton->setVisible(true); m_joystick_btn_bg->guibutton->setVisible(false); m_joystick_btn_center->guibutton->setVisible(false); } else {