목록분류 전체보기 (67)
광어네 맛집
2024년 올해 첫 게시글 같아요 개인적으로 2024년에는 마무리를 잘하는 한 해가 되었으면 좋겠어요 이번 글은 저만 알고 있기 너무 아쉬워서 정보를 알려드리고자 합니다 다들 운동하실 때 한번씩은 운동복이나 띠에 자수를 새기고자 하잖아요? 저만 그런 느낌은 아닐 거예요 ㅎㅎ.. 일반 도복이나 패치 같은 경우에는 주변 세탁소나 근처 '자수'라고 검색하면 해주는 곳이 많죠 그리고 인스타나 블로그 여러 사이트를 봐도 많이 나오는 걸 알 수 있어요 그렇지만 소량이어서 안된다, 너무 비싸다, 택배라서 오래 걸린다라는 단점이 있습니다 전 작업 후 바로 받고 싶고, 값도 너무 비싸지 않았으면 했어요 한 이틀 동안 동대문 이곳저곳을 전화도 해보고 게시글도 남겨서 한 곳 찾았습니다! (동대문에 10곳은 안된다고 하더라고..
오늘은 주짓수 도장에서 평소처럼 스파링을 하였습니다. 스파링 상대는 다양한 체급과 실력의 분으로, 꽤 재미있게 경기를 하였습니다 요즘은 패스 당한 상태에서 이스케이프를 주로 하려고 노력해요 그래서 패스를 당한 상태에서 하는데 체력적으로 너무 힘들더라구요 아직 초크상태나 체급 차이를 극복하는 건 조금 힘든 거 같아요 근데 오늘은 이스케이프하는 중에 상대분 손톱에 목이 걸렸는지 도복에 쓸렸는지 저는 목에 상처랑 그 분은 손톱이ㄷㄷ... 스파링하면서 저나 상대방이 다치면 이래 저래 많이 속상해지네요 조심해서 한다고 해도 이상하게 다치게 되는 상황이 오는 거 같아요 그리고 스파링 끝나고 상대분께서 회사 제품인데 한번 써봐라고 하셔서 공짜로 받았습니당 ㅎㅎ 보니까 색상도 조금 들어가는 립밤이라고 해요 사실 단지 ..
취미 생활도 글 올리지 말지 고민이 많았는데 올리는 게 이래저래 좋을 거 같아서 적어봅니다! 지난 몇 개월 간 부상이랑 개인적인 사유로 운동을 지속적으로 못하게 되었어요 근데 어쩌다 보니 올해 다시 시작하게 되었어요 초반에는 예전에 했던 동작들이 생각이 안 나서 많이 애를 먹었어요 자세하게 그리고 왜 이렇게 해야하는지 잘 알려주셔서 금방 잘 따라가게 되었습니다! 그렇게 시간이 흘러 같이 운동하시는 분께서 함께 대회를 나가자고 하셔서 대회를 나가게 되었습니다! 이상하게 대회를 나간다고 준비하면 의욕이 앞서서인지 부상이 잦았어요 팔꿈치, 손가락, 발목, 발가락 ㅎㅎ.. ( 지금은 손가락쪽 빼고 전부 90%는 돌아왔습니다 :) ) ( 손가락은 80%로 돌아온 거 같네요 ㅜㅜ ) 그러다 10월에는 AJP 대회를..
이번 글은 간단하게 한번 적어두면 좋을 거 같아서 적어봅니다 대부분 Delegate로 어떤 값을 전달할 때나 View Rule을 정할 때 Protocol을 주로 사용하죠? Protocol은 필수나 Optional로 설정해 줄 수 있어요 우선 Swift 파일에서 Objective C에서 같이 사용하고자 하면 코드는 다음과 적으시면 됩니다 @objc protocol fooDelegate { @objc optional func didFinishCompletion(name: String, age: Int) } 이렇게 적으시면 Objective C에서도 사용하지 않거나 사용할 수 있어요 그렇지만 단점은 Objective C에서 지원하지 않는 Object를 Parameter에 넣게 되면 에러가 뜹니다ㅜㅜ 이럴 경우..
fastlane을 혼자 쓰다가 같이 사용할 일이 생겨서 추가 작업이 필요해졌어요 인증서 관련 작업인데 Gitlab에 올려두고 같이 쓰기로 했어요 Match를 이용하여 인증서를 올리는 방법은 간단합니다 /// 초기화 fastlane match init /// 저장소 선택 Gitlab 이더라도 1.git을 선택하시면 됩니다 /// 해당 matchFile을 알맞게 수정 git_url("https://gitlab") storage_mode("git") type("development") type("appstore") app_identifier(["com.kwangho.tistory"]) username("광어") 참고로 Gitlab에서 새로운 레포를 하나 생성한 뒤 진행했어요 /// Apple Developme..
이번 글은 빌드하려고 OS 업데이트 했다가 새로운 버그를 만나 해결하는 글입니다 아이폰 15, iOS17에서 이슈가 있어서 OS 업데이트를 했는데 다음과 같은 에러를 보았어요 * DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY SEARCH_PATHS, use TOOLCHAIN_DIR instead 캡처를 하나만 해서 그렇지 마주한 에러는 이렇게 많아 멘붕왔어요 검색해보니까 CocoaPods을 업데이트 하면 된다고 해요 그래서 지금은 1.12.0을 사용하고 있지만 1.13.0 이상으로 업데이트 해줍니다! 근데 루비도 업데이트 하라고 나오네요 바로 brew로 설치해봅니다! // brew 업데이트 brew update // rbenv 설치 brew install r..
다양한 방법으로 작업하다보면 스토리보드에서 화면이 제대로 나오지 않는 경우가 있습니다 그럴때면 Xcode 를 껐다가 켜보아도 아무런 반응이 없거나 무한 로딩이 걸리면 난감하죠.. 찾아도 navigation을 제대로 연결해주었는지에 대한 글만 있어서 저희 프로젝트에서만 일어나는가 싶기도 했는데 해결법은 상당히 간단했습니다! 1. 우선 DerivedData를 삭제해줍니다! 2. Xcode를 완전히 종료해주세요 3. 이제 맥!북!도 완전히 종료해주세요 4. 다시 맥북을 켜고, Xcode 를 실행시켜보면 다음과 같이 로딩 후 잘 나오게 됩니다 결과 화면은 생략!
오랜만에 글쓰는 거 같아요 많고 많은 일이 있었지만 잘 정리되어가는 거 같아 한시름 놓여요 이번 글은 외부에 테스트 앱을 전달할 때 생긴 이슈입니다 다들 외부에 테스트 앱을 전달할 때 TestFlight를 주로 사용하실텐데 TestFlight 말고도 여러 가지 방법으로 테스트 앱을 전달할 수 있는 걸 아시나요 요번에 새롭게 알게 된 건데 (준비사항 있음) ipa 파일만 있으면 앱을 설치해서 테스트할 수 있어요 Mac App에서 Apple Configurator를 사용해서 아이폰에 설치할 수 있더라구요 이걸 사용하기 전에 apple Developer 홈페이지 > 계정 > 기기 에서 해당 UDID를 등록해주어야 합니다 아니면 '무결성을 확인할 수 없기 때문에 설치할 수 없습니다' 라고 알림이 떠요 이후 아카..
이번 포스팅은 쉬운 거 같지만 막상 하려면 헷갈리는 점선 그리는 방법을 알아보도록 하겠습니다! 그리고 Swift 랑 Objective C 둘 다 적어보고자 합니다! let dotLine = UIView(frame: CGRect(x: view.bounds.midX , y: view.bounds.midX, width: 100, height: 100)) override func viewDidLoad() { ... dotLine.backgroundColor = UIColor.black.cgColor view.addSubView(dotLine) ... } 우선 View 를 선언해줍니다 편의를 위해서 미리 view를 그려줬어요! 이후 CAShapeLayer 와 UIBezierPath 를 이용할건데 CAShaperL..
원래 이 오류의 경우 xib, 스토리보드 아웃렛이 제대로 연결되지 않았을 때 주로 발생한다 " setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key " 근데 이번 케이스에서는 따로 Xib 만들지도 연결하지 않았는데 이런 오류가 떴다 처음에는 단순히 초기화를 잘못한 줄 알고 찾았으나 bgView가 걸려서 검색을 해보니 Class 자체 이름이 비슷해서 에러가 난 거였다... 4시간 정도 날림 ㅎㅎ... 오늘은 개발 조금 쉬어야겠다 예를 들어 내 케이스는 Swift 로 CustomView를 만들어 Objective C로 가져가 사용하려고 했다 왜냐면 기존에 만들어져있는 CustomView가 너무 지져분했기 때문에..
Swift로 코딩을 한 뒤 Objective C에 적용시키려니 다음과 같은 에러가 떴다 'Method Cannot be in an @objc extension of a class (without @nonobjc) because the type of the parameter cannot be represented in Objective-C' 원인은 간단한데 Objective C 에서는 맞지 않다는 거 그럼 에러가 난 부분은 다양할 수 있으나 저 같은 경우에는 enum 처리할 때 에러가 났음 기존 코드 enum Style { case a, b } 바꾼 코드 @objc enum Style: Int { case a, b } 오늘은 간단하게 해결!
회사에서 TestCase를 맥북에서 작성하려다가 불편한 점이 있어서 단축키를 검색해보았습니다! 그랬더니 그냥 기본적인 부분만 있었고 Window 노트북처럼 Alt 키를 이용하여 맥북에는 적용할 수 없다는 점이 나왔습니다 그래서 제가 찾은 방법을 공유해드리고자 합니다! (휴.. 이거 알려주는 사람이 없었어 ㅜ) (시간이 없으신 분들은 빠르게 하단으로!) 우선 맥북에는 시스템 설정에 보면 키보드라는 탭을 찾아볼 수 있는데요 공유해드리는 화면은 Ventura 로 업그레이드를 해서 약간 차이가 있을 수는 있지만 다들 잘 찾으실 수 있을거에요 '키보드 단축키' > '앱 단축키' > '+'를 눌러 단축키를 추가할 수 있습니다! 자 예시로 엑셀을 열어서 행을 추가하고 싶은데 단축키가 없네요..? 그러면 다음과 같이 ..
만약 Xcode 상에서 Undefined Symbol 에러가 뜬다면 다음과 같이 해주면 된다 가장 먼저 flag 가 정상적으로 들어가 있는지 확인 한다! Other C Flag 나 Swift Flag 나 Linker Flag 등 확인 하기 그 다음 디렉토리 내 기존 빌드 정보 파일을 삭제 해준다! DrivedData 삭제! 그리고 다시 빌드 해본다! 이래도 안되면 Target -> General -> Frameworks, libraries, and Embedded content로 들어간 다음 'libz.tbd' 를 추가 해준 뒤 Build Clean 해주고 다시 빌드 해본다! 아마 이러면 대부분 해결될거에요! Xcode 조금만 더 친절하게 알려줬으면 좋겠다 ㅜ 아무튼 오늘도 화이팅!
오랜만에 개발 서적을 읽어보았다 책 페이지는 비교적 많지만 내용은 어렵지 않았다 난이도 : ★☆☆☆☆ 쉬운 버전의 리펙토링 책이라고 생각하면 될 듯 싶다 장점 - 반복 설명 - 이해하기 쉽다 - 대화형 스토리도 있어서 그림과 재밌게 읽을 수 있다 - 자바스크립트라서 무난하게 읽을 수 있다 - 읽으면 2~3일만에 읽을 수 있다 단점 - 말이 모호해서? 살짝 이해안되는 부분이 있었다 (내가 바보야...ㅜ) 느낀점 아직까지 액션과 계산에 대한 부분이 모호하긴 하다 그렇지만 전역변수보다 지역변수를 선호하고 반복된 코드를 줄이는 법 등을 되새길 수 있어서 좋았다 프로젝트에 바로 적용할 수 있고, 주 언어에도 이런 고차 함수가 있나 찾아보는 시간도 가졌다
개발 보다 이전 빌드 세팅이 잘못되어 있어서 수정하는 게 더 많은 듯 Xcode 상 외부 라이브러리를 사용할 때 발생할 수 있는 에러 ' Library not loaded: ~~ Referenced: ~~ Reason:: ~~' 이런 식으로 빌드는 Success 는 나지만 Fatal Error 가 뜰 때 다음과 같이 해주면 해결된다 Target -> General -> Frameworks. Libraries, and Embedded Content -> 에러난 프레임워크 -> Embed 부분을 살펴보면 Do not Embed 로 되어 있을텐데 Embed & Sign 으로 바꿔주면 해결된다! 항상 구글링 하면 가장 먼저 나오는게 빌드 클린 + DrivedData 삭제를 가장 먼저 해보라고 함 ㅎㅎ (그치만 ..
프로젝트를 진행하다 보니 Xcode 버전 별로 확인할 코드가 생기더라구요 그래서 이번 포스팅은 많은 분들이 알고 있겠지만 Xcode 를 버전별로 설치하는 방법을 알아보고자 합니다 사용방법은 간단함! 1. Xcode 종료 2. https://developer.apple.com/download/all/ 여기에서 원하는 Xcode 설치 3. 압축 풀기 및 이름 변경 4. 이름까지 변경한 Xcode를 응용프로그램으로 드래그앤 드롭 이후 터미널 CLI를 통하여 설정할 수 있음 // 현재 Xcode 확인 $ xcode-select -p // Xcode 버전 변경하기 $ sudo xcode-select -s /Applications/[Xcode 버전 선택].app/Contents/Developer // 또는 $ su..
지금 잘못되어 있는 로직 변경이랑 회사 이슈 때문에 요즘 글 쓸 시간도 없는 ㅠㅠ 무튼 이번 포스팅은 Objective C 레거씨 코드 뿌시기! 상황 : BaseViewController를 모든 ViewController 가 상속받고 BaseViewController 안에는 화면 이동 메서드를 넣어두고 이동할 때마다 사용함 -> 리펙토링 : Transfer + Utils 를 추가하여 Class method로 리펙토링 BaseViewController 를 상속받아 사용하는 게 나쁜게 아니지만 해당 프로젝트에서는 중복코드도 많고, 쓰지 않는 BaseViewController 메서드를 굳이 받아야하나? 라고 항상 의문이 생겼었다! 대충 이전 개발자 분의 의도는 알겠으나 Static Method 로 만들면 훨씬..
최근에 알게 된 사실인데 Mac OS의 SIP를 통한 서명 검증 방식이라는 게 있다 정확히 어떤 것인지 다음 포스팅때 알아보고 지금 이슈는 새로운 라이브러리를 Xcode 상에 붙일 때 발생한 에러이다 무한 팝업이 뜨는데... 다음과 같이 해결하면 해결할 수 있다. 이전까지만 해도 우리는 Xcode 주소를 /Application~~ 등으로 직접적으로 알수 있었다 그렇치만 OS 업데이트를 하지 않고 바뀐 점인데 Xcode 경로를 알 수 없게 되었다고 한다 그래서 새로운 라이브러리를 적용하기 위해서는 다음과 같이 바이러니를 삭제 재서명해주는 게 필요하다 1. Xcode 종료 2. Xcode 툴체인 위치 이동 $ cd [XCODE_PATH].app/Contents/Developer/Toolchains/Xcod..
ObjectiveC와 Swift를 같이 사용하기 위해서는 별도의 작업이 필요한것도 있지만 조금만 바꿔주면 되는 것들도 있다 그 중에 하나가 Enum 타입이다 Objective C에서만 사용할 경우 typedef enum { CaseA, CaseB, CaseC, CaseD } ServiceCase; 만약 Swift에서도 사용하고 싶다면 다음과 같이 선언해주면 된다 typedef NS_ENUM(NSUIntegrt, ServiceCase) { CaseA = 0, CaseB, CaseC, CaseD }; 기본적으로 enum type의 경우 0 이 시작점이 대부분인데 레거시 코드를 보는 입장에서는 무작정 바꾸면 안된다 여러 사람들이 만진 코드라서 하드 코딩이 되어 있을 수 있기 때문에 기존에 짜여진 코드를 확인한..
Objective C 로 되어 있는 프로젝트는 Swift를 사용하기 위해서는 'PROJECTNAME-Bridging-Header.h' 을 통해서 상호호환 할 수 있습니다. 헤더 파일만 있다고 다 구현할 수 있는 건 아님! 예를 들어 Objective C 는 Swift 구조체를 사용할 수 없고, Enum 열거형도 사용할 수 없습니다 그렇지만 데이터를 따로 보내거나 각 언어에서 로직을 만든 다음에 보내어 사용할 수는 있습니다! 전제: 지금 다루고 있는 프로젝트 기준으로 말씀드리면 Objective C의 경우 디코딩을 하여 모델화하여 사용하고자 번거로운 작업을 해야했어요 For 반복문을 통해서 NSDictionary에 담아준 뒤 사용ㅎ... 그리고 모델처럼 사용할 수 있었음 Swift는 Codable 프로토콜..
앞에서 쓴 글과 이어서 작성하고자 합니다 이번 글은 조금이나마 깊게 들어가고자 합니다! UIView 내부에 업데이트 메서드는 SetNeedsDisplay, SetNeedLayout, displayIfNeeded, layoutIfNeed 있습니다 살펴보기 전에 UIKit이 어떻게 나온지에 대해서 살펴봐야 할 것 같습니다! 제일 상단에 보이는 UIKit 은 아래 low Level 인 그래픽 API 들을 거쳐 High Level로 만들어진 그래픽 API 입니다! 타 블로그 분들께서는 Metal로 나온 부분은 OpenGL이라고 칭하셨습니다! 무튼 앱이 부드럽게 그려지기위해서는 60FPS 를 유지해야 합니다 이를 위해 Graphics Hardware를 사용하는데 Low Level로 많은 코드, 가장 빠른 Open..
이번 글은 과제를 하면서 실수, 의문점이 드는 것들을 정리 및 회고하고자 합니다! 아마 범위가 넓어서 두번 정도 나눠서 적을 예정! 우리는 Xcode에서 Cocoa Touch Class를 통해서 ViewController를 생성할 때면 viewDidLoad()라는 메서드가 override가 자동으로 만들어지게 됩니다 UIView를 생성할 때는 어떤 문구가 주석처리되어 만들어지는데 /* // Only override draw() if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func draw(_ rect: CGRect) { // Drawing cod..
진짜 갑자기 몸살에 장염에 걸려서 죽을 뻔 ... 아프지만 글은 남기고 싶은게 있어서 포스팅 작성함! 오늘은 SPM에 대해서 살펴볼까 함 흔히 우리가 SPM을 사용하는 방법은 Xcode -> Project -> Package Dependancies -> '+'로 추가해서 사용함 근데 만약 Target이 여러개일 때나 각각 framework가 사용하고 싶을 때가 있을 거임 물론 Pods로 분기처리 해줄 수도 있지만 SPM도 가능은 하다~ 방법은 Xcode -> File -> New -> Package 를 눌러주면 이름과 어디에 저장할지가 나오는데 Git Repo에 올려서 사용하고 싶으면 아래 화면처럼 선택해주고 생성해주면 된다! 그럼 아래처럼 파일이 만들어지는데 하나씩 뜯어보면 간단하다! 먼저 맨 위에서..
이번 포스팅은 Swift로 된 라이브러를 Objective C에서는 어떻게 사용하는지 알아보도록 합니다! 기본적으로 SPM, Pods, 카르타고 등 다양한 경로로 설치할 수 있습니다 설치가 된다면 사용하는 방법은 너무 쉽게 되기 때문에 중간중간 내용은 생략하고 넘어갈게요 우선 Pods로 설치할 경우 Pods > Products > framework 파일이 자동으로 생성됩니다! Objective C로 만들어진 파일일 때는 문제없이 import를 해줘서 사용하면 되지만 Swift로 만들어진 파일을 사용하려면 조금 다른? import 방법이 필요합니다! 예시로 기존에 import를 하려고 했으면 아래처럼 header file만 설정해줬으면 #import "Library.h" Swift file의 경우 head..
요번 포스팅은 SwiftUI frame 오류에 대해서 알아보자 합니다! 간단한거라 바로 알아봅시다! 상황은 개별적인 View를 만들어 ContentView에 보여주고자 하는 상황! SwiftUI는 .infinity로 해주면 알아서 전체로 잡아주는 게 아니였낭..? 근데 보라색 경고가 뜸 ㅜ ( 너 frame 수치가 정확하지 않는데? ) 그래서 아래처럼 바꿔봄 역시 이랬더니 경고 표시는 사라짐! 근데 HardCoding 하기가 싫어서 아래처럼 Swift 형식으로 보내봄! 당연히 이것도 경고 표시는 사라진다! 그치만 이건 온전한 SwiftUI가 아닌걸... 그렇다면 어떻게 할까? 방법은 'GeometryReader' 를 같이 사용하면 됩니다! // body 내부 GeometryReader { proxy in..
모두들 맛점하셨나요 ㅎㅎㅎ 드디어 CoreData의 끝이 보입니다! (사실 Data 수정도 하고 할건 많음 ㅋ) 이건 쉬우니 바로 봅시다! 안에 Entities 나 attributes를 바꾸면 무섭게 에러다!! 이렇게 발생할거에요 그러면 당황하지 말고 디버깅 영역 체크해보면 마이그레이션 안해줬어 ㅡ3ㅡ 이런 메시지를 보게 됩니다! 그럼 저희는 마이그레이션을 해줘야겠죠? ㅎㅎㅎ 먼저 Version 을 하나 추가 해줍니다! 그럼 위 사진처럼 Version 이름이랑 Base model이 나옵니다! 보통 Version에 숫자만 붙이니 이대로 냅두고 Finish를 눌러줍니다! 그럼 상단 탭에는 생겼는데 오른쪽 네비게이터에는 없네요? 띠용 아니에요 ㅋㅋㅋ 옆에 열어서 보면 있습니다! 녹색 체크 버튼을 옮겨줍니다 (..
이번 포스팅은 간단히 알려주고 넘어갈 예정! 사실 제가 회사에 Fastlane 처음 도입해서 혼자 관리하고 있습니다! ( 내가 알아낸 정보 내가 공유해야쥐 ㅎㅎ) 테스터 추가까지 좀 더 편하게 업로드 할 수 있지 않을까 라는 생각에 찾아봤는데 있더라구요? 생각보다 간단함! latform :ios do desc "TestFlight 올라갑니당" lane :testFlight do increment_build_number(xcodeproj: "프로젝트 이름.xcodeproj") build_app(workspace: "프로젝트 이름.xcworkspace", scheme: "스키마 이름") upload_to_testflight( changelog: " 앱 테스트 환경 및 수정 사항 - 코드 수정 및 최적화 적용..
요즘 날씨가 왔다리 갔다리... 왜이렇게 더운지 무튼 ! 이번 포스팅은 예전 포스팅과 연결하여 SQLite 보는 툴 및 Relationships에 대해서 적어보자 합니다! 이전 포스팅 마지막에서 SQlite로 데이터를 저장하고 위치까지 알아봤죠? 그럼 SQLite는 어떻게 열어보냐? 바로 SQLiteBrowser를 이용해서 열어보시면 됩니다! 다운로드 사이트는 https://sqlitebrowser.org/dl/ Downloads - DB Browser for SQLite (Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.2) for Windows: Windows PortableApp Note - If for any..
CoreData를 파다 보니까 포스팅하고 싶은게 자꾸 늘어나네요 ㅎㅎㅎ 간단한 거니까 가볍게 읽고 가봐요 (제가 잘못 생각한 부분은 언제든 피드백 환영입니다!) 우선 CoreData는 CoreDataStack으로 되어 있는 Framework라고 합니다! Stack은 아래 그림처럼 구성되어 있습니다 Container 안에 Context, Coordinator, Model 이 들어가 있는 걸 볼 수 있습니다 앞 포스팅에서 CRUD만 구현하기 위해서 무작정 적었다면 이제는 이해하면서 사용할 수 있습니다! 1. Persistent Container Stack에 필요한 객체들을 모아둔 곳입니다! 여러가지들을 차례대로 알아봐요 2. Managed Object Model 모델은 저장하고 싶은 Data를 저장하는 객체..
SwiftUI도 어느정도 본 것 같고 심화로 들어가다 보니 SwiftUI 한계에 부딪히게 되는 것 같다 그래서 사용하게 된 CoreData! 물론 Realm 쓰면 간단하게 사용할 수 있는데 라이브러리를 많이 쓰면 안좋으니까! 처음에 Xcode를 만들 때 CoreData 체크 후 만들면 AppDelegate에 아래 처럼 자동으로 생기게 된다! // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "test") container.loadPersistentStores(completionHandler: { (storeDescription, ..