diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index aca07d2..a916aba 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -12,6 +12,8 @@ name: "CodeQL" on: + push: + branches: '*' pull_request: # The branches below must be a subset of the branches above branches: '*' @@ -19,7 +21,7 @@ on: jobs: analyze: name: Analyze - runs-on: ubuntu-latest + runs-on: macos-latest permissions: actions: read contents: read @@ -28,17 +30,17 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'ruby' ] + language: [ 'swift' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -48,11 +50,15 @@ jobs: # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - + - name: Install dependencies + run: | + sudo gem install cocoapods + pod install + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # â„šī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -65,4 +71,4 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.talismanrc b/.talismanrc index 345ca2f..396e370 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,5 +1,17 @@ fileignoreconfig: - filename: .github/workflows/secrets-scan.yml +- filename: README.md + checksum: e725ff07d9c1bc643171e63e63e8de446017be17e9164909ec3a1b2585fe45a3 +- filename: Podfile.lock + checksum: 1e736dd1291867ab01f6557552c7fa275cce09f83fe85d91530a8848dee1e991 +- filename: csnews.xcodeproj/project.pbxproj + checksum: 4d045dea691bb025be52852918b463a973e3a3a9feea258782be9680b3fe44a0 +- filename: csnews.xcodeproj/xcshareddata/xcschemes/csnews.xcscheme + checksum: d3b2a9aaeb2194c3688178a88fed42399c2ce11967141267da2fa4ca352274ae +- filename: Podfile.lock + checksum: 8092cb6bb4ccbf7b384dfacdae70eb97651522d41ccf1bb95cd2a4f3f3133907 +- filename: csnews.xcodeproj/project.pbxproj + checksum: aac67b934c7066328ee9b6d00d45e53fcf8f1ce8b2b950aa99f18ae5f2752673 ignore_detectors: - filecontent version: "1.0" \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d78b6bc --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012 - 2025 Contentstack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Podfile b/Podfile index 516102c..97baf6d 100644 --- a/Podfile +++ b/Podfile @@ -1,9 +1,23 @@ source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' +platform :ios, '15.6' use_frameworks! target 'csnews' do - pod 'NVActivityIndicatorView', '~> 4.4.0' - pod 'Kingfisher', '~> 4.10.0' - pod 'Contentstack' + pod 'NVActivityIndicatorView', '~> 5.2.0' + pod 'Kingfisher', '~> 8.5.0' + pod 'Contentstack', '~> 3.15.0' end + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.6' + end + end + + # Remove _CodeSignature from all frameworks (fixes rsync sandbox error) + Dir.glob('Pods/**/*.framework/_CodeSignature').each do |code_signature| + FileUtils.rm_rf(code_signature) + end + end diff --git a/Podfile.lock b/Podfile.lock index 0aa2fe8..0af36ec 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,26 +1,26 @@ PODS: - - Contentstack (3.3.0) - - Kingfisher (4.10.1) - - NVActivityIndicatorView (4.4.1): - - NVActivityIndicatorView/Presenter (= 4.4.1) - - NVActivityIndicatorView/Presenter (4.4.1) + - Contentstack (3.15.0) + - Kingfisher (8.5.0) + - NVActivityIndicatorView (5.2.0): + - NVActivityIndicatorView/Base (= 5.2.0) + - NVActivityIndicatorView/Base (5.2.0) DEPENDENCIES: - - Contentstack - - Kingfisher (~> 4.10.0) - - NVActivityIndicatorView (~> 4.4.0) + - Contentstack (~> 3.15.0) + - Kingfisher (~> 8.5.0) + - NVActivityIndicatorView (~> 5.2.0) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - Contentstack - Kingfisher - NVActivityIndicatorView SPEC CHECKSUMS: - Contentstack: 297c5cfd221d0463b8f86093682dcfb04fe14f79 - Kingfisher: c148cd7b47ebde9989f6bc7c27dcaa79d81279a0 - NVActivityIndicatorView: f0a6b0ed2973d9544da268f4eb76696f0a9577b0 + Contentstack: 2f82e64408036f33d9b561e65cd5c359943362fa + Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c + NVActivityIndicatorView: fe52a6a68664c2df8991d7d9e3d86d8d19453c53 -PODFILE CHECKSUM: 841fe30c08174e6ed20c8ce8df27fb8bfe0ce183 +PODFILE CHECKSUM: b2454119c050e263e2a299a5738b04b422663bf7 -COCOAPODS: 1.6.0.rc.2 +COCOAPODS: 1.16.2 diff --git a/README.md b/README.md index d1f5e97..6e2e3fd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ **About this project**: Create an iOS news app using Contentstack iOS SDK. - + ## Tutorial diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..88da02e --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,27 @@ +# Security + +Contentstack takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations. + +If you believe you have found a security vulnerability in any Contentstack-owned repository, please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Send email to [security@contentstack.com](mailto:security@contentstack.com). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + +- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) +- Full paths of source file(s) related to the manifestation of the issue +- The location of the affected source code (tag/branch/commit or direct URL) +- Any special configuration required to reproduce the issue +- Step-by-step instructions to reproduce the issue +- Proof-of-concept or exploit code (if possible) +- Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +[https://www.contentstack.com/trust/](https://www.contentstack.com/trust/) diff --git a/csnews.xcodeproj/project.pbxproj b/csnews.xcodeproj/project.pbxproj index 0ebbfa3..cf361df 100644 --- a/csnews.xcodeproj/project.pbxproj +++ b/csnews.xcodeproj/project.pbxproj @@ -3,11 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 020B4AF04BE8344AFEDFC850 /* Pods_csnews.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBD98A043B84E4C74322D7B2 /* Pods_csnews.framework */; }; 230405CC1BA2FA2300CEE159 /* EmptySegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 230405CB1BA2FA2300CEE159 /* EmptySegue.swift */; }; 230405CE1BA2FCF700CEE159 /* CategoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 230405CD1BA2FCF700CEE159 /* CategoryController.swift */; }; 231443E91BA321960040250B /* MSSlidingPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 231443E61BA321960040250B /* MSSlidingPanelController.m */; }; @@ -25,9 +24,11 @@ 23CDAA2F1BCFA7380066A61A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 23CDAA311BCFA7380066A61A /* Localizable.strings */; }; 23EB41DA1BA3448200600155 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EB41D91BA3448200600155 /* Extensions.swift */; }; 23EB41DC1BA34BEA00600155 /* TopNewsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EB41DB1BA34BEA00600155 /* TopNewsController.swift */; }; + 9318C7FA2EE89CCDB2776A9E /* Pods_csnews.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 358C8114D43735C91EFCCC6C /* Pods_csnews.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 176B4C7FB6C99113856AC22E /* Pods-csnews.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-csnews.debug.xcconfig"; path = "Target Support Files/Pods-csnews/Pods-csnews.debug.xcconfig"; sourceTree = ""; }; 230405CB1BA2FA2300CEE159 /* EmptySegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmptySegue.swift; sourceTree = ""; }; 230405CD1BA2FCF700CEE159 /* CategoryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryController.swift; sourceTree = ""; }; 231443E51BA321960040250B /* MSSlidingPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSlidingPanelController.h; sourceTree = ""; }; @@ -54,11 +55,10 @@ 23CDAA361BCFB96A0066A61A /* hi-IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "hi-IN"; path = "hi-IN.lproj/Localizable.strings"; sourceTree = ""; }; 23EB41D91BA3448200600155 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 23EB41DB1BA34BEA00600155 /* TopNewsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TopNewsController.swift; sourceTree = ""; }; + 358C8114D43735C91EFCCC6C /* Pods_csnews.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_csnews.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3752A72C1C3ABB102F61B165 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 46F3CBEBAF0574A168CDA14B /* Pods-csnews.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-csnews.debug.xcconfig"; path = "Pods/Target Support Files/Pods-csnews/Pods-csnews.debug.xcconfig"; sourceTree = ""; }; - 90B379CA8D1D1CC158A49183 /* Pods-csnews.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-csnews.release.xcconfig"; path = "Pods/Target Support Files/Pods-csnews/Pods-csnews.release.xcconfig"; sourceTree = ""; }; + 49AFDC7F1D59B26EE1E8E3DB /* Pods-csnews.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-csnews.release.xcconfig"; path = "Target Support Files/Pods-csnews/Pods-csnews.release.xcconfig"; sourceTree = ""; }; BB1B2DFCFB656C3EEFF758AF /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DBD98A043B84E4C74322D7B2 /* Pods_csnews.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_csnews.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -69,7 +69,7 @@ 236683671B94252300E22B59 /* MobileCoreServices.framework in Frameworks */, 236683651B94251C00E22B59 /* Security.framework in Frameworks */, 236683631B94250700E22B59 /* SystemConfiguration.framework in Frameworks */, - 020B4AF04BE8344AFEDFC850 /* Pods_csnews.framework in Frameworks */, + 9318C7FA2EE89CCDB2776A9E /* Pods_csnews.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -121,7 +121,7 @@ 2366833D1B94236000E22B59 /* csnews */, 2366833C1B94236000E22B59 /* Products */, 5C4D2E668126DE6FCF256AE9 /* Frameworks */, - 26FC58103C60EEA0CF547E1E /* Pods */, + A42B63567521BA07A80D72A0 /* Pods */, ); sourceTree = ""; }; @@ -185,26 +185,26 @@ 236683661B94252300E22B59 /* MobileCoreServices.framework */, 236683641B94251C00E22B59 /* Security.framework */, 3752A72C1C3ABB102F61B165 /* Pods.framework */, - DBD98A043B84E4C74322D7B2 /* Pods_csnews.framework */, + 358C8114D43735C91EFCCC6C /* Pods_csnews.framework */, ); name = Frameworks; sourceTree = ""; }; - 26FC58103C60EEA0CF547E1E /* Pods */ = { + 5C4D2E668126DE6FCF256AE9 /* Frameworks */ = { isa = PBXGroup; children = ( - 46F3CBEBAF0574A168CDA14B /* Pods-csnews.debug.xcconfig */, - 90B379CA8D1D1CC158A49183 /* Pods-csnews.release.xcconfig */, + BB1B2DFCFB656C3EEFF758AF /* Pods.framework */, ); - name = Pods; + name = Frameworks; sourceTree = ""; }; - 5C4D2E668126DE6FCF256AE9 /* Frameworks */ = { + A42B63567521BA07A80D72A0 /* Pods */ = { isa = PBXGroup; children = ( - BB1B2DFCFB656C3EEFF758AF /* Pods.framework */, + 176B4C7FB6C99113856AC22E /* Pods-csnews.debug.xcconfig */, + 49AFDC7F1D59B26EE1E8E3DB /* Pods-csnews.release.xcconfig */, ); - name = Frameworks; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -214,11 +214,11 @@ isa = PBXNativeTarget; buildConfigurationList = 2366835A1B94236000E22B59 /* Build configuration list for PBXNativeTarget "csnews" */; buildPhases = ( - 0CE87252EC002323889E502B /* [CP] Check Pods Manifest.lock */, + A6F573DBA6DEB45FA190CD5F /* [CP] Check Pods Manifest.lock */, 236683371B94235F00E22B59 /* Sources */, 236683381B94235F00E22B59 /* Frameworks */, 236683391B94235F00E22B59 /* Resources */, - C68A18BA31E6D9E48A326BA0 /* [CP] Embed Pods Frameworks */, + 607FD467A9923BFDE1AA371F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -235,9 +235,10 @@ 236683331B94235F00E22B59 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0630; + LastUpgradeCheck = 1640; ORGANIZATIONNAME = Reefaq; TargetAttributes = { 2366833A1B94235F00E22B59 = { @@ -248,7 +249,7 @@ }; buildConfigurationList = 236683361B94235F00E22B59 /* Build configuration list for PBXProject "csnews" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -280,42 +281,48 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0CE87252EC002323889E502B /* [CP] Check Pods Manifest.lock */ = { + 607FD467A9923BFDE1AA371F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + "${PODS_ROOT}/Target Support Files/Pods-csnews/Pods-csnews-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Contentstack/Contentstack.framework", + "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework", + "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-csnews-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Contentstack.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NVActivityIndicatorView.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-csnews/Pods-csnews-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - C68A18BA31E6D9E48A326BA0 /* [CP] Embed Pods Frameworks */ = { + A6F573DBA6DEB45FA190CD5F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-csnews/Pods-csnews-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework", - "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NVActivityIndicatorView.framework", + "$(DERIVED_FILE_DIR)/Pods-csnews-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-csnews/Pods-csnews-frameworks.sh\"\n"; + 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; }; /* End PBXShellScriptBuildPhase section */ @@ -376,23 +383,37 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -408,7 +429,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "$(inherited)"; @@ -421,17 +442,29 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = 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_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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; @@ -439,6 +472,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -447,33 +481,35 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = "$(inherited)"; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; }; name = Release; }; 2366835B1B94236000E22B59 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 46F3CBEBAF0574A168CDA14B /* Pods-csnews.debug.xcconfig */; + baseConfigurationReference = 176B4C7FB6C99113856AC22E /* Pods-csnews.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + "FRAMEWORK_SEARCH_PATHS[arch=*]" = "$(inherited)"; + INFOPLIST_FILE = csnews/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/csnews", + "@executable_path/Frameworks", ); - "FRAMEWORK_SEARCH_PATHS[arch=*]" = "$(inherited) $(PROJECT_DIR)/csnews"; - INFOPLIST_FILE = csnews/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", ); + PRODUCT_BUNDLE_IDENTIFIER = "com.raweng.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ./csnews/BridgeHeader.h; SWIFT_SWIFT3_OBJC_INFERENCE = On; @@ -483,22 +519,23 @@ }; 2366835C1B94236000E22B59 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 90B379CA8D1D1CC158A49183 /* Pods-csnews.release.xcconfig */; + baseConfigurationReference = 49AFDC7F1D59B26EE1E8E3DB /* Pods-csnews.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = csnews/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/csnews", + "@executable_path/Frameworks", ); - INFOPLIST_FILE = csnews/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", ); + PRODUCT_BUNDLE_IDENTIFIER = "com.raweng.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ./csnews/BridgeHeader.h; SWIFT_SWIFT3_OBJC_INFERENCE = On; diff --git a/csnews.xcodeproj/xcshareddata/xcschemes/csnews.xcscheme b/csnews.xcodeproj/xcshareddata/xcschemes/csnews.xcscheme index 8ff5abc..b9b59d4 100644 --- a/csnews.xcodeproj/xcshareddata/xcschemes/csnews.xcscheme +++ b/csnews.xcodeproj/xcshareddata/xcschemes/csnews.xcscheme @@ -1,6 +1,6 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> + + + + @@ -53,24 +62,16 @@ - - - - @@ -82,14 +83,12 @@ ReferencedContainer = "container:csnews.xcodeproj"> - - diff --git a/csnews/Info.plist b/csnews/Info.plist index 9a74002..0ac2893 100644 --- a/csnews/Info.plist +++ b/csnews/Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.raweng.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/csnews/NewsCell.swift b/csnews/NewsCell.swift index d09f6fc..a6a6a88 100644 --- a/csnews/NewsCell.swift +++ b/csnews/NewsCell.swift @@ -58,12 +58,15 @@ class NewsCell: UITableViewCell { ] self.bannerImageView.contentMode = UIView.ContentMode.scaleAspectFill self.bannerImageView.clipsToBounds = true - let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: param))! - self.bannerImageView.kf.setImage(with: url, - placeholder: nil, - options: [.transition(.fade(1))], - progressBlock: nil, - completionHandler: nil) + if let stringParam = param as? [String: Any]{ + let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: stringParam))! + self.bannerImageView.kf.setImage(with: url, + placeholder: nil, + options: [.transition(.fade(1))], + progressBlock: nil, + completionHandler: nil)} else{ + print("Error: param dictionary keys are not all Strings. Cannot generate image URL.") + } }else{ self.bannerImageView.image = UIImage(named: "thumbImage"); } diff --git a/csnews/NewsDetailController.swift b/csnews/NewsDetailController.swift index ff2a05f..9738699 100644 --- a/csnews/NewsDetailController.swift +++ b/csnews/NewsDetailController.swift @@ -44,13 +44,17 @@ class NewsDetailController: UIViewController, UIWebViewDelegate { AnyHashable("height"): self.bannerImageView.frame.size.height, AnyHashable("fit"): "crop" ] - let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: param))! -// let url = URL(string: imageURLString)! - self.bannerImageView.kf.setImage(with: url, - placeholder: nil, - options: [.transition(.fade(1))], - progressBlock: nil, - completionHandler: nil) + if let stringParam = param as? [String: Any]{ + let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: stringParam))! + // let url = URL(string: imageURLString)! + self.bannerImageView.kf.setImage(with: url, + placeholder: nil, + options: [.transition(.fade(1))], + progressBlock: nil, + completionHandler: nil)} + else{ + print("Error: param dictionary keys are not all Strings. Cannot generate image URL.") + } }else{ self.bannerImageView.image = UIImage(named: "thumbImage"); } diff --git a/csnews/TopNewsController.swift b/csnews/TopNewsController.swift index 5a032d1..6de4c74 100644 --- a/csnews/TopNewsController.swift +++ b/csnews/TopNewsController.swift @@ -242,7 +242,7 @@ class TopNewsController: UIViewController, UITableViewDataSource, UITableViewDel categories.enumerateObjects({ (obj, index, stop) -> Void in var categoryUID:String = "" let category:Entry = AppDelegate.sharedSite().contentType(withName: "category").entry(withUID: categoryUID) - category.configure(with: obj as! [AnyHashable: Any]) + category.configure(with: obj as! [String: Any]) categoryUID = category.uid if(categoryUID == self.selectedCategoryUId){ retVal = true @@ -294,13 +294,18 @@ class TopNewsController: UIViewController, UITableViewDataSource, UITableViewDel AnyHashable("height"): self.bannerImage.frame.size.height, AnyHashable("fit"): "crop" ] - let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: param))! - self.bannerImage.kf.setImage(with: url, - placeholder: nil, - options: [.transition(.fade(1))], - progressBlock: nil, - completionHandler: nil) - }else{ + if let stringParam = param as? [String: Any] { + let url = URL(string: AppDelegate.sharedSite().imageTransform(withUrl: imageURLString, andParams: stringParam))! + self.bannerImage.kf.setImage(with: url, + placeholder: nil, + options: [.transition(.fade(1))], + progressBlock: nil, + completionHandler: nil) + } else{ + print("Error: param dictionary keys are not all Strings. Cannot generate image URL.") + } + + } else { self.bannerImage.image = UIImage(named: "thumbImage"); } }else {