EnglishPlan.xcodeproj và thư mục EnglishPlan.EnglishPlan.xcodeproj để mở bằng Xcode.study2027 thành một chữ bất kỳ.Apple ID miễn phí: app hết hạn sau 7 ngày. Khi đó cắm máy và bấm Run lại, dữ liệu vẫn giữ nguyên nếu bạn không xóa app.
Nếu Xcode báo lỗi khi build, copy nội dung lỗi gửi lại để sửa.
Thư mục web/ là bản web của app, có đủ 5 tab: Hôm nay, Lộ trình, Từ vựng, Luyện tập, Tiến độ. Bản web là trang tĩnh, không cần build. Mỗi lần push lên main, GitHub Actions (.github/workflows/deploy-web.yml) tự deploy lên GitHub Pages.
| Tính năng | Bản web |
|---|---|
| Lộ trình, bài học, tự đánh giá | Có |
| 600 từ vựng, phát âm, ôn thẻ lặp lại ngắt quãng | Có (giọng đọc của trình duyệt, ưu tiên Anh-Anh) |
| Ghi âm Speaking | Có. Bản ghi chỉ lưu trên trình duyệt đó |
| Trang viết, bấm giờ 40 phút, sao chép cho AI chấm | Có |
| Đồng bộ tiến độ qua tài khoản Google | Có (Firebase). Chưa cấu hình thì lưu trên trình duyệt |
| Cài lên màn hình chính, mở khi mất mạng | Có (PWA) |
| Thông báo từ vựng 15 phút | Chưa (chỉ có trên app iOS) |
doanhnn/EnglishPlan, vào Settings > Pages:
english.vnpt.app rồi bấm Save.Vào Google Cloud Console > Network services > Cloud DNS, chọn zone của vnpt.app, bấm Add standard:
english (tức english.vnpt.app.)CNAME300doanhnn.github.io.Hoặc dùng lệnh (thay ZONE_NAME bằng tên zone):
gcloud dns record-sets create english.vnpt.app. --zone=ZONE_NAME --type=CNAME --ttl=300 --rrdatas=doanhnn.github.io.
Sau vài phút đến khoảng 1 giờ, quay lại Settings > Pages:
.app bắt buộc HTTPS, nên trang chỉ mở được sau khi GitHub cấp xong chứng chỉ.Khuyến nghị: xác minh domain để người khác không chiếm được subdomain. Vào GitHub > Settings (tài khoản) > Pages > Add a domain, nhập vnpt.app, rồi thêm bản ghi TXT mà GitHub đưa cho bạn vào Cloud DNS.
english.vnpt.app.asia-southeast1 (Singapore), chế độ production.firestore.rules rồi bấm Publish.firebaseConfig vào web/js/firebase-config.js:export const FIREBASE_CONFIG = {
apiKey: "…",
authDomain: "….firebaseapp.com",
projectId: "…",
appId: "…",
};
Các giá trị trong firebaseConfig được phép công khai. Dữ liệu vẫn an toàn nhờ firestore.rules: mỗi tài khoản chỉ đọc và ghi được dữ liệu của chính mình.
Lần đầu đăng nhập trên một trình duyệt, tiến độ đang có ở trình duyệt đó được gộp với dữ liệu trên tài khoản, nên không mất gì. Sau đó các thay đổi đồng bộ gần như tức thì giữa các máy.
Sau khi sửa EnglishPlan/Content.swift hoặc Lessons.swift (từ vựng, bài học), chạy lệnh sau rồi push:
python3 tools/convert_content.py
Lệnh này sinh lại web/js/content.js và web/js/lessons.js.
Nếu sửa Plan.swift (lịch học), cần sửa tương ứng trong web/js/plan.js.
Chạy thử trên máy:
cd web && python3 -m http.server 8000
Rồi mở http://localhost:8000.
web/vendor/firebase.js là Firebase SDK 10.12.2 đã được đóng gói sẵn. Nếu muốn đóng gói lại:
npm i firebase@10.12.2 esbuild
npx esbuild tools/firebase-entry.js --bundle --format=esm --minify --outfile=web/vendor/firebase.js