ㅌ
체크리스트
- endpoint 클라에서 숨겨야 함!
- 애플로그인 고유값 뭔지 iphone se로도 해보고 애플로그인 포스팅 업데이트하기
id랑 token 둘 다 저장!?
- 리덕스 타입 체킹
- dispatch, state type checking
8/18 (화)
- 앱 내 화면 공유 및 저장하기
https://coding-dahee.tistory.com/210
- 커밋 메세지 하나로 만들기
https://coding-dahee.tistory.com/211
8/15 (토)
- 파이어베이스 테스트용 릴리즈용 앱 나누기
https://coding-dahee.tistory.com/209
8/10 (월)
- 진동/무음 시 소리 울리기
https://coding-dahee.tistory.com/206
7/30 (금)
- 앱 화면 만들 때 Margin 표시 이런식으로 하면 어느 부분에 Margin이 있는지 바로 알 수 있어서 좋다! 지원언니에게 배운 것!!
import React from 'react';
import styled from 'styled-components';
import { ViewStyle } from 'react-native';
import { nomalize } from '../../utils/constants';
const Container = styled.View`
width: 100%;
height: ${({ height }: ViewStyle) => height}px;
`;
export const marginWide = nomalize(20);
export const marginMiddle = nomalize(15);
export const marginNarrow = nomalize(10);
export const marginVeryNarrow = nomalize(5);
export const MarginWide = () => <Container height={marginWide} />;
export const MarginMiddle = () => <Container height={marginMiddle} />;
export const MarginNarrow = () => <Container height={marginNarrow} />;
export const MarginVeryNarrow = () => <Container height={marginVeryNarrow} />;
이렇게 만들어놓고 <MarginWide /> <MarginNarrow /> 로 활용해서 쓴다 짱!!!
7/23 (목)
- remote config 세팅. 엄청 간단하다!
- ios nfc write 로직 다시 완벽히 정리했음.
7/22 (수)
- 루빗 간단한 버그 처리
7/20 (월)
- 오늘도 오픈소스에 질문 올렸다. 무음 모드에서 알람을 울릴 수 있는지!
https://github.com/zo0r/react-native-push-notification/issues/1546
- android & iOS 데이터 없는 NFC write 하는 로직 완성!
android는 uid가 있어서 application/com.roubit 만 써줘서 루빗 바로 켜지게 해줬고,
ios는 uid를 못읽게 apple이 막아놔서 직접 텍스트를 write 해줌.
7/16 (목)
- 오늘도 오픈소스에 질문 올렸다! 엄청 금방 답변해주심.
https://github.com/zo0r/react-native-push-notification/issues/1533
- 빠져있는 부분 ㅊ가해달라고 이슈 올림!
https://github.com/invertase/react-native-firebase/issues/3959
7/15 (수)
- 오 이런 방법도 있군
https://stackoverflow.com/questions/21424525/how-can-i-set-div-opacity-only-not-text
- react native splash screen - Ios에서 안먹어서 ios에서 대충 직접 글씨만 만졌다...
- 드디어 루빗, 눈송이 배포날
7/14 (화) - 5월부터 계속 루빗 작업중.. 매일매일..
- 저번에 repeatType 관련해서 readme 수정 요청했었는데 버그 또 발견해서 이번에 또 하게 되었다!)
- 푸시 알람 관련 이슈 올렸다! (내가 해결한 방법 제시, readme 수정 요청)
https://github.com/zo0r/react-native-push-notification/issues/1525
6/2 (화)
- 루빗: HashTagReport, UpdateHashTag 화면 작업
6/1 (월)
- redux-saga 연결 (루빗에 movie api로 연결해봄)
5월 막주
- 화면 비율
에 따른 스크린 조정. px 하드코딩은 좋지 않다!
- 갑자기 auto save 잘 안됨
5/24 (일)
1) progressCircle, pieChart 구현
progressCircle 사용법 포스팅
https://coding-dahee.tistory.com/192
pieChart는 설치할게 하나 더 있어서 이슈올려놓음. 라이브러리 이거 썼음
https://github.com/genexu/react-native-pie-chart/issues/26
<<<오픈소스 활동>>>
- pie-chart 사용자들이 추가적으로 해야할 일 이슈에 올림
https://github.com/genexu/react-native-pie-chart/issues/26
- push alarm 연속으로 보내는 방법
https://github.com/zo0r/react-native-push-notification/issues/1451
푸시 알람 연속적으로 보내는 방법은 스팸이래 흑흑 그러면 다른 알람 어플은 어떻게 한거지?
https://github.com/react-native-community/push-notification-ios/issues/124
맞는 레포지토리에 다시 이슈 올려놓음!
5/23 (토)
1) 홈에 들어올 때마다 오늘~6일후의 알람까지 자동으로 예약하도록 로직 만들었음
5/21 (목)
1) 알림기능 삽질
- iOS는 알람 한 번 울릴 때 interval 설정을 최소 60초로 할 수 있다. 5초마다 반복하고 싶은데 그건 안드로이드에서밖에 못함....... 후우 하루 삽질했는데 포기!!! 포기할 줄도 알아야 한다!! 대신 이슈는 올려놓았음
https://coding-dahee.tistory.com/190
5/18 (월)
- 카카오로그인 키해시값 가져옴 (자바코드로 가져오는게 제일 좋음)
- fcm 연결
https://coding-dahee.tistory.com/186
- mutation 미리 알 수 없는 variables는 useRef를 이용하자
// Mutation
const loginInput: LoginInput = useRef({
// useRef 적극 이용 바로 알 수 없는 값 null로 해놓고 .current로 바꾸면 좋음
provider: null,
accessToken: null, // 근데 이걸 뮤테이션 날릴 때 하는 방법은 없어?
deviceId: null,
pushId: null,
});
const [loginMutation, {loading, data}] = useMutation(LOGIN, {
variables: {data: loginInput.current},
});
// 이렇게 해놓고 provider 알아내면
// loginInput.current = 'kakao'
// 이런식으로 하면 된다. useRef없이 그냥 loginInput = { ... } 이렇게 선언하면
// loginMutation() 할 때 그대로 null값이 들어간다.
- deviceInfo
https://coding-dahee.tistory.com/187
... 루빗 개발 ...
4/28 (화)
- 날씨, 미세먼지 api
https://coding-dahee.tistory.com/172
- 루빗 달리자!!!!
4/27 (월)
- 애니메이션
커스텀 탭네비게이션 안에 움직이는 바 구현 animation 이용
import React, {useState, useRef} from 'react';
import {Animated, View} from 'react-native';
import styled from 'styled-components';
import {SSafeAreaView} from '../components/StyledComponents';
import {TouchableWithoutFeedback} from 'react-native';
import {withNavigation} from '@react-navigation/compat';
import {setFocusedTabIdx, ReduxStates} from '../redux/store';
import {useSelector, useDispatch} from 'react-redux';
import {StackNavigationProp} from '@react-navigation/stack';
import {RootTabParamList} from '../navigation/RootTabNavigation';
import {SoundIcon, SoundDarkIcon} from '../assets/image_container';
import {cWidth} from '../utils/constants';
import {ThemeProp, ThemeEnum} from '../utils/theme';
import {useTheme} from '../context/ThemeContext';
import {useMovingBarX} from '../context/CommonContext';
interface Props {
children: React.ReactNode; // 넘어오는 childre은 flex: 1로 설정되어 있어야 함
navigation: StackNavigationProp<RootTabParamList>;
}
const height = 40;
const borderRadius = 20;
const margin = 10;
const Container = styled.View`
width: ${cWidth}px;
/* background-color: ${({theme}: ThemeProp) => theme.main}; */
background-color: lightcoral;
`;
const ItemsContainer = styled.View`
height: ${height}px;
margin: ${margin}px;
flex-direction: row;
border-radius: ${borderRadius}px;
align-self: center;
background-color: ${({theme}: ThemeProp) => theme.lightgrey};
`;
const ItemContainer = styled.View`
width: 33%;
justify-content: center;
align-items: center;
`;
const Image = styled.Image`
width: 15px;
height: 15px;
`;
const TabLayout = ({children, navigation}: Props) => {
const {themeType} = useTheme();
const {movingBarX} = useMovingBarX();
const dispatch = useDispatch();
const focusedTabIdx = useSelector(
(state: ReduxStates) => state.focusedTabIdx,
);
return (
<SSafeAreaView>
{children}
<Container>
<ItemsContainer>
<TouchableWithoutFeedback
onPress={() => {
dispatch(setFocusedTabIdx(0));
Animated.timing(movingBarX, {
toValue: 0,
duration: 200,
}).start();
navigation.navigate('HomeStackNavigation');
}}>
<ItemContainer>
<Image
source={
themeType === ThemeEnum.LIGHT ? SoundIcon : SoundDarkIcon
}
/>
</ItemContainer>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback
onPress={() => {
dispatch(setFocusedTabIdx(1));
Animated.timing(movingBarX, {
toValue: cWidth / 3 - margin, // TODO: 화면 별로 조정
duration: 200,
}).start();
navigation.navigate('StatStackNavigation');
}}>
<ItemContainer>
<Image
source={
themeType === ThemeEnum.LIGHT ? SoundIcon : SoundDarkIcon
}
/>
</ItemContainer>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback
onPress={() => {
dispatch(setFocusedTabIdx(2));
Animated.timing(movingBarX, {
toValue: (cWidth / 3) * 2 - margin * 2,
duration: 200,
}).start();
navigation.navigate('SettingStackNavigation');
}}>
<ItemContainer>
<Image
source={
themeType === ThemeEnum.LIGHT ? SoundIcon : SoundDarkIcon
}
/>
</ItemContainer>
</TouchableWithoutFeedback>
</ItemsContainer>
<Animated.View // Moving Bar
style={{
position: 'absolute',
width: '33%',
height,
margin,
backgroundColor: 'pink',
borderRadius,
transform: [
{
translateX: movingBarX,
},
],
}}
/>
</Container>
</SSafeAreaView>
);
};
export default withNavigation(TabLayout);
4/23 (목)
- svg 차트 각각 뭘 의미하는지 분석. 1/4 원 그릴 수 있게 됨
- 백준
4/17 (금)
- 루빗 서버와 소셜로그인 연동
에서 클라가 보내준 token decode하고 db에 user 정보 있는지 확인 후 jwt 토큰 만들어서 준다.
구글: 클라에서 긴 token 보내주
4/16 (목)
- 루빗 서버와 소셜로그인 연동
에서 클라가 보내준 token decode하고 db에 user 정보 있는지 확인 후 jwt 토큰 만들어서 준다.
구글: 클라에서 긴 token 보내주
면 decode 후 email로 db 확인
카카오: 클라에서 짧은 token 보내주면 user/me users/me? 이 api (카카오에서 제공. 포스트맨으로 테스트 가능) 로 유저정보 얻을 수 있음 여기서 jwt 토큰 만들어서 준다
애플: 클라에서 긴 token 보내주면 decode 후 sub (이게 클라에서 user) 키의 value로 db 확인 후 jwt 토큰 만들어서 준다
- 그래프
https://coding-dahee.tistory.com/169
example 갖다 쓰기만 했다.
커스터마이징 해야할 부분이 있어서 이건 react-native-svg 공부한 후 직접 만들어보는걸로!
4/15 (수)
- 루빗: 구글, 카카오 로그인 연동
https://coding-dahee.tistory.com/168
4/12 (일)
- graphql nexus 설명 들었음.
https://coding-dahee.tistory.com/167
배포 시 http 문제가 있을 것 같아서 테스트플라이트/apk 뽑는 정도까지! 디자인은 전혀 상관하지 말고. 해보자구~
- 이제 알고리즘 스터디를 할까?
4/9 (목)
- 노마드 코더 배포 부분!
헤로쿠인데,,, 쓸 일 없지 싶다!
- 핱시 서버 연결 (타입스크립트)
노마드코더 헤로쿠로 올리려다,,, 이거로 내가 계쏙 할거같진 않아서 그냥 도커로 올림. 아직 이해가 부족하지만 서버 배포 성공!
재균과 했던 서버 배포 그대로 적용해서 핱시 서버 올렸다!
https://github.com/daheeahn/heart-signal-client
https://github.com/daheeahn/heart-signal-server
근데 endpoint는 클라에서 숨겨야 함!
후우!!! 이제 진짜 개발하고 클라 배포만 하면 된다 화이팅!!!!!
나중에는 넥서스로 migrate 하기. 그 구조 재균,재규에게 물어보기!
포스팅용x 단순기록용o
https://coding-dahee.tistory.com/166
https://coding-dahee.tistory.com/160
4/8 (수)
- 학생 인증해서 깃헙 프로!
- rm -rf .git 하면 해당 폴더 git commit 기록 삭제 가능! 그리고 다시 첨부터 하면 됨.
- 알고리즘 공부 가볍게 시작!
입출력부터!! (차근차근님의 추천)
https://github.com/daheeahn/Algorithm
학교 알고리즘은 java. 근데 python으로 해보고 싶어서 파이썬 고
인생을 짧으니 파이썬을 쓰자!
https://devych.com/python-installation/
https://sun2do.tistory.com/121
오늘은 입출력 1~7을 진행했다
백준 문제번호
2557, 1000, 2558, 10950, 10951, 10952, 10953
4/1 (수)
- vscode c 컴파일/실행 환경 구성! 이제 알고리즘 공부하자
<오늘은 루빗 디자인 바탕으로 화면세팅 & 간단한 View 디자인을 했다. 재밌다!>
- Tab 내에서 특정 화면만 TabBar 없애게 하려면 setOptions({tabBarVisible: false})로 하면 되는데, 그냥 custom tab 만드는게 제일 속편함!
- flex: 0.9 / flex: 0.1로 해야 두번째 아이템을 제일 끝에 둘 수 있음. 그냥 [스크린위] 000 0 [스크린아래]
이렇게 하고 싶으면 flex를 저렇게 해야 한다는거! flex-end 쓰니까 안됨. flex를 제대로 모르고 있었음.
- TouchableWithoutFeedback: Tab 클릭할 때 쓰면 좋음.
- StyledComponents 라는 파일 만들어서 컴포넌트 공유 가능! Theme도 잘 내려옴. (styled-components 의 Theme)
- hook 써서 useInput 쓰는거 복습!
- Switch도 hooks 써서! 그리고 CustomSwitch 컴포넌트 안에 useInput 하지말고 그냥 switch가 들어가는 screen마다 만들어주는게 좋음. 그게 관리가 편함! 커스텀한 동작도 많을거라서
- AddNfc.tsx는 여러 Tab에서 다 접근 가능해야함.
import {CompositeNavigationProp} from '@react-navigation/native';
interface Props {
// Composite 안한다고 goBack이 이상한 곳으로 가는건 아님
navigation: CompositeNavigationProp<
StackNavigationProp<SettingStackParamList, 'AddNfc'>,
StackNavigationProp<HomeStackParamList, 'AddNfc'>
>;
}
AddNfc.tsx 에서 이렇게 여러 곳에서 올 수 있음을 알려준다!
3/31 (화)
- 영철 실시간 강의
- 루/프 회의
- 노마드코더 리덕스 101 (2020 업데이트 버전)
Redux Toolkit 이후
https://coding-dahee.tistory.com/162
- 리덕스 한 번 설명해보기 (루빗앱에 적용시키면서 해봤다! 필수코드, 최종코드 위에 보면 됨)
3/30 (월)
- 대학강의 - 생법 2, 3주차
- 노마드코더 리덕스 101 (2020 업데이트 버전)
Redux Toolkit 이전까지
3/29 (일)
- 서버 띄워보기 (비공개 포스팅)
https://coding-dahee.tistory.com/160
- 나의 일정 관리 만들기 by 프로그라피 추천
https://docs.google.com/spreadsheets/d/1fjx0du5_R-vHb7CJp0M4mAmSAgtSb-EOF800Wp7PsOI/edit#gid=0
3/28 (토)
- 러브레터는 명작이다........
3/27 (금)
- typescript 파일에서 prop 타입체킹이 안돼서 뭔가 설정이 부족함을 느낌.
이곳을 참조해 타입스크립트 설정을 했다! 너무 잘되어 있다.
https://reactnative.dev/blog/2018/05/07/using-typescript-with-react-native
이게 공식문서
https://reactnavigation.org/docs/typescript/
근데 내가 원하는건 navigation 타입 체킹이었음 => 해결법 찾아내고 포스팅함!
=> https://coding-dahee.tistory.com/157
<루빗 소셜로그인 구현>
- 애플로그인
https://coding-dahee.tistory.com/156
- 카카오로그인
https://coding-dahee.tistory.com/159
login()하면 창 뜨는 것까지 봄
- 에러 모음 앞으로 여기에 모으자!
https://coding-dahee.tistory.com/158
- 0.62 Fast Refresh 안되는 문제 이슈 제기!
https://github.com/facebook/react-native/issues/28420
3/26 (목) 슬의 3회~
- 타입스크립트 적용~
https://dev-yakuza.github.io/ko/react-native/typescript/
아주 쉽다!
- 루빗 캘린더(커스텀으로 만든다), 퀵알람 구현! Hover는 실패
https://coding-dahee.tistory.com/124
- react native gesture handler
https://coding-dahee.tistory.com/155
Swipeable 아주 쉽다!
- 마지막 날짜 구하기
https://coding-dahee.tistory.com/153
3/25 (수) 핱시 첫방!!
- 출시는 못해서 아쉽지만 그래도 대강 만들었다 ㅎㅎ
3/24 (화)
- 핱시 주요기능 개발 (실제 작대기 결과 등)
- 진짜 재밌다!!!
- useQuery로 얻은 data는 state로 한번 다시 저장. data는 useEffect로 바뀌는거 감지가능해서 useEffect 안에서 useState를 써주는 식으로!
const {loading: isBoardLoading, data: boardData} = useQuery(BOARD, {
variables: {episodeId: selectedEpi?.id},
skip: !fetchBoard || !selectedEpi,
fetchPolicy: 'network-only', // refetch를 하면 이걸 조심해야 한다.
});
useEffect(() => {
if (!isBoardLoading && boardData) {
setFetchBoard(false);
}
}, [boardData, isBoardLoading]);
// 이 때 skip에서 selectedEpi가 완전히 set되지 않은 상태에서 불릴 수 있어서 추가 조건으로 달아준거!
이런 식의 코딩을 했음
data 감지하고 그 데이터가 있으면 fetchBoard를 안하도록! 그리고 query는 fetchBoard가 true일 때만 작동하도록!
그러니까 코드가 아주 깔끔해졌음!!!!
https://github.com/trojanowski/react-apollo-hooks/issues/158
thanks to jinshin!!!!
3/23 (월)
- 코드푸시 테스트 플라이트 / 아이콘 자동으로 만들어주는 사이트
https://coding-dahee.tistory.com/152
- 핱시 주요기능 개발 (작대기 긋기 arrow, board)
3/22 (일)
- 인증기능
https://coding-dahee.tistory.com/150
- svg로 애니메이션
https://coding-dahee.tistory.com/151
3/19 (목) (슬의 2회 하는 날 ㅋ.ㅋ)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#18.5~6
- camera 사용법 추가 (사진 찍기, 갤러리에 사진 저장하기)
https://coding-dahee.tistory.com/147
- 오늘은 대학교 온라인 강의 몰아서 들어서 개발공부는 별로 못했다! 그래도 1 commit 1 tistory 했다!!
3/18 (수)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#17.0~3
#18.0~4
- permission 사용법
https://coding-dahee.tistory.com/145
- 갤러리 가져오기 사용법
https://coding-dahee.tistory.com/146
- camera 사용법
https://coding-dahee.tistory.com/147
- run-ios 빌드 에러
brew로 설치하니까 됐음!
npm -> sudo npm -> yarn -> brew 를 시도하고 나서야 성공!
- 화면 가로/세로 길이 추출
https://coding-dahee.tistory.com/148
블로그 하나 하나가 나에게 도움됐던 것처럼, 내 블로그도 다른 사람들에게 도움이 되었으면 좋겠다!
모든 rn 개발자를 응원하며!!
3/17 (화)
- 루빗 회의 (노원 16:00~19:00)
회의가 길어졌지만 앱 기능도 어느정도 설명 들었고 방향성이 잡힌 것 같다!!
- nfc 태그 시 앱 실행하기 (android만)
https://coding-dahee.tistory.com/144
성공했다~~~ 별거아니지만 너무 기쁨!!!
목표시간 설정해서 nfc 태깅하는 기능 만들 수 있겠다
- ios dev team 등록해서 실제아이폰기기에 앱 실행시키기
첫번째 방법 굳!
- automatically manage signing 이용하니 profile 만들 필요가 없었음!
3/16 (월)
https://github.com/zo0r/react-native-push-notification/issues/1342
- 푸시알림 push-notificatio이 제일 적합함을 깨달았다!
- localSchedule
- 원하는 기능 존재하는지 이슈 올려봤음
- ios developer 등록: 내돈!!!!
3/15 (일)
- docker 이용해서 서버 띄워보기
https://coding-dahee.tistory.com/124
3/13 (금)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#12.3~10
#13.0~
- 핱시앱 고난과 역경 until autoLogin
1) https://coding-dahee.tistory.com/142
useMutation 라이브러리 에러
2) ApolloClient 라이브러리 에러
https://coding-dahee.tistory.com/120
3) asyncStorage에서 가져와야 하는데 안가져온채로 setState해서 헤매고
4) 네비게이션 스택 쌓는데 헤매고!
5) 그래도 기본틀은 다 짜놔서 좋다.
6) 임의로 형용사+명사 로 닉네임도 지어줬다!
3/12 (목)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#10.4~7
#11.0~5
#12.0,1,2
3/11 (수)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
~#3.20
#10.0 ~ 10.3
서버 강의 다 듣고 앱 강의 시작! 앱 조금 듣다가 서버배포 강의 들어야지!
- 보일러 플레이트 코드 한데 모아놓음. 언젠가는!! 패키지로 publish 하기!!!!
https://coding-dahee.tistory.com/132
3/10 (화)
- react native animation (루빗)
뿌-듯
관련 포스팅도 할 예정!
https://coding-dahee.tistory.com/139
3/8 (일)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#3.10 ~ 3.17
resolver 계속 하는 중. prisma 짱이다.
- graphql 핱시앱 기본 틀 짰다.
3/7 (토)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#3.10 ~ 3.17
resolver 계속 하는 중. prisma 짱이다.
3/6 (금)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#3.7 ~ #3.9
- node 설치, 자바스크립트 배열, map 가르쳐줌
3/5 (목)
- 노마드 코더 풀스택 인스타그램 클론 코딩 강의
#3.3 ~ #3.6
3/4 (수)
- 구글맵 연동
project: 약국 재고 현황
github: https://github.com/daheeahn/Pharmacy-Inventory
tistory: https://coding-dahee.tistory.com/130
- rn 보일러 플레이트
github: https://github.com/daheeahn/react-native-bolier-plate
tistory: https://coding-dahee.tistory.com/132
- 푸시알림 안드로이드 반복알림 버그 해결
project: roubit
tistory: https://coding-dahee.tistory.com/131
2020년 3/3 (화)
- Nfc 태깅
project: roubit
tistory: https://coding-dahee.tistory.com/127
- floating button
project: roubit
library: https://github.com/mastermoo/react-native-action-button
'Development' 카테고리의 다른 글
구글 플레이스토어 주문 ID 해석하기 (.. 뒤에 붙은 숫자의 비밀!) (0) | 2023.02.23 |
---|---|
dayjs 제대로 활용하기: getTimezoneOffset (0) | 2023.02.17 |
dayjs.tz() 사용 시 주의할 점: timezone 등록 (Android Hermes) (0) | 2023.02.17 |
🎨아스키 아트를 아시나요? :: 텍스트와 특수문자만으로 사진,그림 흉내내기 (0) | 2023.02.09 |
RDBMS와 NoSQL의 차이점 (0) | 2023.01.27 |