claude로 어떻게 공부를 할 수 있을까 궁금해서 기존에 필터 앱을 업데이트 하고자 다음과 같이 요청 하였습니다.
"새로운 질문을 하지 swift 언어로 iOS 15 이상에서 카메라앱을 만들거야 동영상 촬영 앱이고 기능은 다음과 같아 1. 동영상 촬영 버튼을 누르면 촬영이 되고 10초뒤에 촬영이 자동 종료 되 2. 동영상 필터는 2개가 제공될거야 3. 필터는 흑백하고 카툰 필터 4. 녹화된 영상은 앱내에 저장하는데 사진앱으로 내보내기 기능을 제공 5. 녹화사에는 전면 카메라 녹화나 후면 카메라 녹화 둘중 하나만 되게 할거야 6. 고급 카메라는 PIP 기능으로 영상이 녹화되게 할거야 7. 카메라 촬영중에는 화면에서 10초 타이머가 보여지면서 촬영된 영상이 실시간으로 보이게 할거야 여기까지 "
이렇게 요청 하니 CIFilter 기반 이 나왔다.....
CIFilter로는 퍼포먼스가 안나오는걸 알고 있기에... 다시 요청 했다.
"아 미안해... metal framework로 구현해줘 CIFilter는 퍼포먼스 안나와"
다음과 같이 안내해 주었다.
코드를 보니.... 분류가 안되어 있어 재차 요청 했다.
"파일명 별로 구분좀 해줄 수 있을까?"
위와 같이 프로젝트 구조도 알려주었다.
그래서 각각의 소스코드는 다음과 같다.
// MARK: - Models/ShaderTypes.swift struct Vertex { var position: SIMD3<Float> var textureCoordinate: SIMD2<Float> }
enum FilterType { case normal case grayscale case cartoon }
// MARK: - Shaders/CameraShaders.metal """ #include <metal_stdlib> using namespace metal;
struct VertexIn { float3 position [[attribute(0)]]; float2 textureCoordinate [[attribute(1)]]; };
struct VertexOut { float4 position [[position]]; float2 textureCoordinate; };
// MARK: - Controllers/MetalCameraController.swift class MetalCameraController: NSObject { private var captureSession: AVCaptureSession? private var videoOutput: AVCaptureMovieFileOutput? private var textureCache: CVMetalTextureCache?
private let metalDevice: MTLDevice private let metalCommandQueue: MTLCommandQueue private let pipelineState: MTLRenderPipelineState private let vertexBuffer: MTLBuffer
private var currentFilterType: FilterType = .normal
// MARK: - ViewControllers/MetalCameraViewController.swift class MetalCameraViewController: UIViewController { private var cameraView: CameraView! private var cameraControls: CameraControls! private var cameraController: MetalCameraController!
private var currentFilter: FilterType = .normal private var recordingTimer: Timer? private var remainingTime: Int = 10
글쓰다가 키보드 배치가 달라서 날려 먹고 다시 쓴다. (이래서 키보드는 맥용 키보드만 써야 하나 보다 ....
iOS 앱을 단말 즉 아이폰 또는 아이패드(이하 아이팟 터치)에 올리고 테스트 하거나 앱스토어 배포 하고 나면
크래쉬 로그를 입수 하게 될 것이다.
여기서 크래쉬 로그란.... (모르는 분을 위해서)
-> 앱이 죽을때 내가 무얼 하다 죽었다 라고 유언장 같은 걸 남긴다 이게 바로 크래쉬 로그 이다.
이 크래쉬 로그를 열어 보면 메모리 주소랑 이것저것 만 보여진다.
아무것도 알 수 없다. 이때 dSYM 파일이라 불리우는 심볼릭 관련 파일을 통해
앱의 유언장을 앱 개발자가 알아 볼 수 있게 된다.
여기서 잠깐 dSYM이 어디있나요?(라고 물어 보시는 분이 있을거 같아 남긴다.)
-> dSYM은 디바이스 빌드하여 나온 결과물 *.app 파일과 같은 폴더내에 존재 한다.
이 dSYM 파일은 빌드시마다 바뀌니 배포나 테스트 목적으로 .app 파일을 만들 경우
dSYM 파일도 같이 복사하여 사본을 만들어서 따로 저장해야 한다.
다음으로 할 것은 다음과 같다.
dSYM이 존재한다면 crash 로그를 xcode의 organizer 를 통해 확인을 할 수 있다.
통상 이렇게 보여진다.
출처 : http://stackoverflow.com/questions/6086201/need-help-about-ios-crash-log
Date/Time:2011-05-2211:28:40.514+0700
OS Version: iPhone OS 4.3.3(8J2) ReportVersion:104
ExceptionType: EXC_BAD_ACCESS (SIGSEGV) ExceptionCodes: KERN_INVALID_ADDRESS at 0xf039cde6 CrashedThread:0