본문 바로가기

App Dev/iOS

옛 버전 iOS 소스 코드 빌드업 하는 방법

반응형

2024 년 07월 01일 

- 소장 - 

 iOS 웹뷰 로 개발된 앱.. 이거.. iOS 배포 가능할까요?

관련 계정은 다 있어요..

기존에 iOS 서비스를 하고 있는 업체인데..
처음 개발 후 한번 배포한 것이 현재 상황임.

보안 관련 오류 건을 수정하고..배포할 내부 개발자가 없어서..
저희가 할 수 있는지 확 인 중입니다

 - 전임 - 

페이지를 보여주는 웹뷰로, Firebase와 연동하여 푸시알림 기능이 있는 것 같습니다. 그 외에는 로딩중 스플래시 이미지를 띄우는 기능, 커스텀 알럿 기능 등이 있는 것 같습니다. 

- 소장 -

그렇죠.. 기능은 얼마없을꺼요.. 이놈이 뭐.. 보안에 문제가 있다고 해서.. 일부 수정할 꺼고.. 그런 후 배포를 하려는데.. 할 수 있을까요?

 

위와 같이 처음 대화가 이루어졌다. 

해당 소스코드를 내가 직접 파악을하고 

개발 범위를 가늠한 뒤 

소장님께 개발 범위를 특정하고 

7월 5일 까지 해당 개발 부분의 외부인력 투입 여부를 결정해야한다. 

iOS simulator 17.5 설치 후 코드 테스트 

iOS 소스 코드를 확인하고 실행해보니 

에러가 많이 발생한다. 버전 문제도 있고 firbase 및 다양한 부분에서 에러가 발생한다. 

https://formestory.tistory.com/8

 

[Xcode12] Could not build module 'nanopb' / Double-quoted include "pb.h" in fram

안녕하세요오늘은 Xcode cocoapods install 후 생기는 error에 대해 포스팅해보도록 하겠습니다. 제가 발견한 시점은 엑스코드를 12 버전으로 올린 후cocoapods를 install 했을 때 나타났습니다.에러는 아래

formestory.tistory.com

* 참고자료

https://wood-fxrest.tistory.com/117

 

Xcode | ERROR - Build error 해결 / Sandbox: rsync.samba(22475) deny(1) file-write-create

Sandbox: rsync.samba(22475) deny(1) file-write-create Xcode 빌드 중 위와 같은 에러를 마주했다. 총 세 개의 에러가 동시에 확인됐고, 해결을 위해 코드를 전면적으로 확인하고 시뮬레이터와 Xcode 모두 종료 후

wood-fxrest.tistory.com

* 참고자료 

 

 

< 문제를 해결 하는 방법을 기술 >

 

1. The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 17.5.99.

버전 문제 이 부분을 잘 세팅해줘야 한다. 

나의 경우는 최종적오르 13.0 버전으로 변경해 줬다 . -> 디자인 영역까지 최적화 하기 위해 

우선 프로젝트 Kokkan 파란이모티콘 있는 부분을 클릭하면 이와 같은 설정 화면을 볼 수 있다.

general 에서 Minimum Deplyments 가 뭐로 되어있는지 봐야한다 

기존에는 11.0으로 세팅된 프로젝트인데 Xcode 가 업데이트 되면서 해당 버전을 실행이 안된다. 

그래서 프로젝트의 버전을 올려준다고 생각하면된다. 

Targets 항목에 보면 

Test , UITests 해당 부분 

해당 부분 Deployment info 세팅도 동일하게 한다. 

Pod 도 동일하게 환경 셋팅을 13.0 으로 맞춰 준다 . 

한번에 하는 방법이 있는지 모르겠지만 targets 들을 일일이 들어가서 변경해주었다. 

< 아래는 claud 에게 확인한 답변 > 

이 오류 메시지는 프로젝트의 iOS 배포 대상(Deployment Target) 설정과 관련된 문제를 나타냅니다. 구체적으로 설명하면:

  1. 문제 원인:
    • 현재 프로젝트의 iOS 배포 대상이 iOS 11.0으로 설정되어 있습니다.
    • 하지만 현재 사용 중인 Xcode 버전에서 지원하는 iOS 배포 대상 범위는 iOS 12.0부터 17.5.99까지입니다.
  2. 이 문제가 발생하는 이유:
    • Xcode가 업데이트되면서 지원하는 iOS 버전 범위가 변경되었을 수 있습니다.
    • 오래된 프로젝트를 새로운 Xcode 버전으로 열었을 때 흔히 발생합니다.

해결 방법:

  1. Xcode에서 프로젝트 설정 열기:
    • 프로젝트 네비게이터에서 프로젝트 파일(Kokkan.xcodeproj)을 선택합니다.
  2. 배포 대상 업데이트:
    • 'General' 탭으로 이동합니다.
    • 'Deployment Info' 섹션에서 'iOS Deployment Target'을 찾습니다.
    • 이를 최소 iOS 12.0 이상으로 변경합니다. (예: 12.0 또는 그 이상)
  3. 모든 타겟 확인:
    • 프로젝트에 여러 타겟이 있다면, 각 타겟에 대해 위 과정을 반복합니다.
  4. 팟파일(Podfile) 업데이트 (CocoaPods 사용 시):
    • 프로젝트에서 CocoaPods를 사용하고 있다면, Podfile을 열고 platform :ios 줄을 찾아 버전을 업데이트합니다.
    • 예: platform :ios, '12.0'
  5. 프로젝트 재빌드:
    • 변경 사항을 저장하고 프로젝트를 다시 빌드합니다.

주의사항:

  • 배포 대상을 높이면 이전 iOS 버전을 사용하는 기기에서 앱을 실행할 수 없게 될 수 있습니다.
  • 앱의 요구사항과 대상 사용자층을 고려하여 적절한 배포 대상을 선택하세요.

이과정을 다 진행해야 합니다. 

Podfile 도 중요합니다. 

# Uncomment the next line to define a global platform for your project
platform :ios, '13.0'

# 여기에 use_modular_headers! 추가
use_modular_headers!

target 'Kokkan' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  
  # Firebase 코어 및 필요한 기능들을 명시적으로 추가
  pod 'Firebase/Core'
  pod 'Firebase/Analytics'
  pod 'Firebase/Messaging'
  pod 'Firebase/Installations'  # InstanceID 대신 사용

  # 기타 필요한 Firebase 서비스들을 여기에 추가할 수 있습니다.
  # Nanopb 추가 및 버전 지정
  pod 'nanopb', '2.30909.0', :modular_headers => true
  # Pods for Kokkan

  target 'KokkanTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'KokkanUITests' do
    # Pods for testing
  end

end

이와 같이 작성해줬습니다. 

환경을 13.0 으로 맞춰 줬습니다.  

해당 파일을 수정했다면 꼭 Pod install 을 해줘야합니다. 



2.

Logging Error: Failed to initialize logging system. Log messages may be missing. If this issue persists, try setting IDEPreferLogStreaming=YES in the active scheme actions environment variables.  에러

 

이 오류는 Xcode의 로깅 시스템 초기화에 실패했다는 것을 나타냅니다. 이 문제를 해결하기 위해 다음 단계들을 시도해 볼 수 있습니다:

  1. IDEPreferLogStreaming 환경 변수 설정:
    • Xcode에서 프로젝트를 엽니다.
    • 상단 메뉴에서 "Product" > "Scheme" > "Edit Scheme"를 선택합니다.
    • 왼쪽 사이드바에서 "Run"을 선택합니다.
    • "Arguments" 탭을 클릭합니다.
    • "Environment Variables" 섹션에서 "+" 버튼을 클릭합니다.
    • Name에 "IDEPreferLogStreaming", Value에 "YES"를 입력합니다.
    • "Close" 버튼을 클릭하여 저장합니다.
  2. Xcode 재시작:
    • Xcode를 완전히 종료하고 다시 실행합니다.
  3. 파생 데이터(Derived Data) 삭제:
    • Xcode를 종료합니다.
    • Finder에서 ~/Library/Developer/Xcode/DerivedData 폴더로 이동합니다.
    • 이 폴더의 내용을 모두 삭제합니다.
    • Xcode를 다시 실행합니다.
  4. Xcode 캐시 정리:
    • 터미널을 열고 다음 명령어를 실행합니다: 
    •  
      rm -rf ~/Library/Developer/Xcode/DerivedData rm -rf ~/Library/Caches/com.apple.dt.Xcode
    •  
    • Xcode를 다시 실행합니다.
  5. Xcode 업데이트:
    • App Store에서 Xcode를 최신 버전으로 업데이트합니다.
  6. macOS 업데이트:
    • 운영 체제를 최신 버전으로 업데이트합니다.
  7. 프로젝트 설정 확인:
    • 프로젝트의 빌드 설정에서 로깅 관련 옵션을 확인하고 필요한 경우 조정합니다.

이와 같이 해당 부분을 세팅하였습니다. 


3.  

double-quoted include "pb.h" in framework header, expected angle-bracketed instead

 

해당 에러도 상당한 골치꺼리였는데 설정 코드 하나로 해결 할 수 있었습니다. 

이러한 경고들은 주로 프레임워크 헤더에서 다른 헤더 파일을 포함할 때 발생하는 문제입니다. 이를 해결하기 위한 여러 방법이 있습니다:

  1. 전역 설정으로 경고 무시: 이전에 제안한 방법을 확장하여 모든 이런 종류의 경고를 무시할 수 있습니다. Xcode에서:
    • 프로젝트 설정으로 이동
    • 'Build Settings' 탭 선택
    • "Other Warning Flags"를 찾아 다음 플래그 추가: 
    •  
      -Wno-quoted-include-in-framework-header
    •  
    이 플래그를 Debug와 Release 모두에 추가하세요.
  2. Podfile 수정: Podfile에 다음 내용을 추가하여 특정 Pod에 대해 모듈러 헤더를 사용하도록 설정할 수 있습니다:
     
    pod 'GoogleDataTransport', :modular_headers => true pod 'FirebaseMessaging', :modular_headers => true
    또는 모든 Pod에 대해 일괄적으로 적용:
    use_modular_headers!
  3. Post Install 스크립트 추가: Podfile의 끝에 다음과 같은 post_install 스크립트를 추가하여 모든 targets의 경고 설정을 수정할 수 있습니다:
    ruby
    Copy
    post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = 'YES' config.build_settings['OTHER_CFLAGS'] ||= ['-Wno-quoted-include-in-framework-header'] end end end
  4. 수동으로 헤더 파일 수정 (권장하지 않음): 마지막 방법으로, 문제가 되는 헤더 파일을 직접 수정할 수 있습니다. 하지만 이 방법은 Pod 업데이트 시 변경사항이 사라질 수 있어 권장되지 않습니다. 예를 들어, GDTCOREndpoints.h 파일에서:
    c
    Copy
    #include "GDTCORTargets.h"
    를 다음과 같이 변경:
    c
    Copy
    #include <GDTCORTargets.h>

실행 순서:

  1. Podfile을 수정합니다.
  2. 터미널에서 프로젝트 디렉토리로 이동합니다.
  3. 다음 명령어를 실행합니다:
    Copy
    pod deintegrate pod install
  4. Xcode에서 프로젝트를 다시 열고 빌드합니다.

* 중요 *

use_modular_headers!

저는 해당 코드를 Podfile 에 추가 하여 일괄 적용하여 해당 에러를 해결 했습니다. 


4.

 No such module 'FirebaseInstanceID' 에러 

해당 부분은 버전 문제인것으로 확인됩니다. 

Podfile 을 최신화 해주면 됩니다.

이 오류는 'FirebaseInstanceID' 모듈을 찾을 수 없다는 것을 나타냅니다. 이를 해결하기 위해 다음 단계를 따르세요:

  1. Firebase SDK 업데이트: FirebaseInstanceID는 더 이상 사용되지 않을 수 있습니다. 최신 Firebase SDK에서는 FirebaseInstallations로 대체되었습니다. Podfile을 열고 Firebase 관련 pod을 최신 버전으로 업데이트하세요:
     
    pod 'Firebase/Analytics' pod 'Firebase/Messaging'
  2. Pod 업데이트: 터미널에서 프로젝트 디렉토리로 이동한 후 다음 명령어를 실행하세요:
     
    pod update
  3. 코드 수정: AppDelegate.swift 파일에서 import 문을 수정하세요:
     
    // 이 줄을 제거하거나 주석 처리하세요 // import FirebaseInstanceID // 대신 이 줄을 추가하세요 (필요한 경우) import FirebaseInstallations
  4. 프로젝트 정리: Xcode에서 Product > Clean Build Folder를 선택한 후 프로젝트를 다시 빌드하세요.
  5. Xcode 재시작: 문제가 지속된다면 Xcode를 완전히 종료하고 다시 시작해보세요.
  6. Firebase 초기화 코드 확인: AppDelegate에서 Firebase 초기화 코드가 올바르게 설정되어 있는지 확인하세요:
     
    FirebaseApp.configure()
  7. 프로젝트 설정 확인: 프로젝트의 Build Phases > Link Binary With Libraries에 필요한 Firebase 프레임워크가 모두 포함되어 있는지 확인하세요.

5.Sandbox: rsync.samba(35397) deny(1) file-write-create 에러

 

프로젝트 파일 → Build Settings → Build Options → User Script Sandboxing

 

해당 부분 수정해주면 됩니다 .



///////////////////////////////////

해야하는 일

////////////////////////////////////

ios 

옛날 소스 

보안 정책 

대응 못해서 

기능 추가는 아님 

보안 정책 수정 해야하는지 보안 정책 수정했으면 어떻게 배포를 하는지에 

sm 7월 말  -> 할 수 있다 없다 해당 부분 알려주는 것이 중요

어떻게 어떻게 

보안 이슈는 어떻게 확인 ???? 

-> 어떻게 적용하고 배포하는지 

-> 전문가의 손길이 있어야하는지 ? 

최초 배포자 ? -> 최초 만들어준 업체 -> 연락 -> 배포 하냐고 

반응형