diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/Contents.json new file mode 100644 index 0000000..1682122 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_123@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_123@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@2x.png new file mode 100644 index 0000000..7ab9828 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@3x.png new file mode 100644 index 0000000..cdc2457 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_123.imageset/key_123@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/Contents.json new file mode 100644 index 0000000..0e11b46 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_a@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_a@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@2x.png new file mode 100644 index 0000000..00812a2 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@3x.png new file mode 100644 index 0000000..2f6c4ba Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_a.imageset/key_a@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/Contents.json new file mode 100644 index 0000000..e5b8629 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_ai@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_ai@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@2x.png new file mode 100644 index 0000000..6bf1f1b Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@3x.png new file mode 100644 index 0000000..f39eed4 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_ai.imageset/key_ai@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/Contents.json new file mode 100644 index 0000000..1b3ba7b --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_b@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_b@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@2x.png new file mode 100644 index 0000000..1125f96 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@3x.png new file mode 100644 index 0000000..aceada8 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_b.imageset/key_b@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/Contents.json new file mode 100644 index 0000000..0abce3d --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_c@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_c@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@2x.png new file mode 100644 index 0000000..4d71dd7 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@3x.png new file mode 100644 index 0000000..8b0a193 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_c.imageset/key_c@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/Contents.json new file mode 100644 index 0000000..866f853 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_d@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_d@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@2x.png new file mode 100644 index 0000000..1e0a4be Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@3x.png new file mode 100644 index 0000000..6d0ffb1 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_d.imageset/key_d@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/Contents.json new file mode 100644 index 0000000..0c83674 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_del@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_del@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@2x.png new file mode 100644 index 0000000..d182447 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@3x.png new file mode 100644 index 0000000..6c9fd3b Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_del.imageset/key_del@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/Contents.json new file mode 100644 index 0000000..3c37790 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_e@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_e@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@2x.png new file mode 100644 index 0000000..e93b8b9 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@3x.png new file mode 100644 index 0000000..1791c62 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_e.imageset/key_e@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/Contents.json new file mode 100644 index 0000000..e5f8f11 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_f@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_f@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@2x.png new file mode 100644 index 0000000..69a87ae Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@3x.png new file mode 100644 index 0000000..41e40f8 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_f.imageset/key_f@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/Contents.json new file mode 100644 index 0000000..306eb06 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_g@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_g@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@2x.png new file mode 100644 index 0000000..97f3707 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@3x.png new file mode 100644 index 0000000..9aa3558 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_g.imageset/key_g@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/Contents.json new file mode 100644 index 0000000..60e7887 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_h@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_h@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@2x.png new file mode 100644 index 0000000..ee00347 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@3x.png new file mode 100644 index 0000000..d3cad35 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_h.imageset/key_h@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/Contents.json new file mode 100644 index 0000000..d5a74bc --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_i@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_i@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@2x.png new file mode 100644 index 0000000..eb7b0e8 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@3x.png new file mode 100644 index 0000000..2f35e38 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_i.imageset/key_i@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/Contents.json new file mode 100644 index 0000000..791c24f --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_j@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_j@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@2x.png new file mode 100644 index 0000000..4c2924e Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@3x.png new file mode 100644 index 0000000..5c53b5d Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_j.imageset/key_j@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/Contents.json new file mode 100644 index 0000000..6c4f1ef --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_k@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_k@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@2x.png new file mode 100644 index 0000000..df4c7b8 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@3x.png new file mode 100644 index 0000000..d0ce1ad Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_k.imageset/key_k@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/Contents.json new file mode 100644 index 0000000..f1dd999 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_l@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_l@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@2x.png new file mode 100644 index 0000000..c51401c Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@3x.png new file mode 100644 index 0000000..6f10e27 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_l.imageset/key_l@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/Contents.json new file mode 100644 index 0000000..eeaef94 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_m@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_m@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@2x.png new file mode 100644 index 0000000..5992e4f Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@3x.png new file mode 100644 index 0000000..3d4d336 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_m.imageset/key_m@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/Contents.json new file mode 100644 index 0000000..f2860dc --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_n@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_n@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@2x.png new file mode 100644 index 0000000..8df5b38 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@3x.png new file mode 100644 index 0000000..a736c70 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_n.imageset/key_n@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/Contents.json new file mode 100644 index 0000000..d0985ad --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_o@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_o@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@2x.png new file mode 100644 index 0000000..48ce37f Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@3x.png new file mode 100644 index 0000000..a490e9c Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_o.imageset/key_o@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/Contents.json new file mode 100644 index 0000000..91534c8 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_p@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_p@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@2x.png new file mode 100644 index 0000000..50155eb Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@3x.png new file mode 100644 index 0000000..cdb3857 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_p.imageset/key_p@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/Contents.json new file mode 100644 index 0000000..d177b1f --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_q@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_q@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@2x.png new file mode 100644 index 0000000..d6be01b Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@3x.png new file mode 100644 index 0000000..1e4def7 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_q.imageset/key_q@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/Contents.json new file mode 100644 index 0000000..fc2cf4f --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_r@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_r@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@2x.png new file mode 100644 index 0000000..d850b99 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@3x.png new file mode 100644 index 0000000..ac49f1a Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_r.imageset/key_r@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/Contents.json new file mode 100644 index 0000000..0d9df51 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_s@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_s@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@2x.png new file mode 100644 index 0000000..6b6c31d Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@3x.png new file mode 100644 index 0000000..e2a9b06 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_s.imageset/key_s@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/Contents.json new file mode 100644 index 0000000..b4f2e28 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_send@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_send@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@2x.png new file mode 100644 index 0000000..10ba33b Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@3x.png new file mode 100644 index 0000000..db50cb1 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_send.imageset/key_send@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/Contents.json new file mode 100644 index 0000000..5ef0204 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_space@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_space@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@2x.png new file mode 100644 index 0000000..ca3ec73 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@3x.png new file mode 100644 index 0000000..d07ae5a Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_space.imageset/key_space@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/Contents.json new file mode 100644 index 0000000..3e5a801 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_t@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_t@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@2x.png new file mode 100644 index 0000000..c627336 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@3x.png new file mode 100644 index 0000000..03491a2 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_t.imageset/key_t@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/Contents.json new file mode 100644 index 0000000..9aa5d19 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_u@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_u@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@2x.png new file mode 100644 index 0000000..b0b7b60 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@3x.png new file mode 100644 index 0000000..0d02abe Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_u.imageset/key_u@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/Contents.json new file mode 100644 index 0000000..ff21bb8 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_up@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_up@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@2x.png new file mode 100644 index 0000000..e657e87 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@3x.png new file mode 100644 index 0000000..4a81035 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_up.imageset/key_up@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/Contents.json new file mode 100644 index 0000000..53505e7 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_v@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_v@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@2x.png new file mode 100644 index 0000000..417aa9d Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@3x.png new file mode 100644 index 0000000..7cecfc1 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_v.imageset/key_v@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/Contents.json new file mode 100644 index 0000000..638d983 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_w@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_w@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@2x.png new file mode 100644 index 0000000..a1104d6 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@3x.png new file mode 100644 index 0000000..62d987d Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_w.imageset/key_w@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/Contents.json new file mode 100644 index 0000000..f6ab18b --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_x@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_x@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@2x.png new file mode 100644 index 0000000..cfbd41c Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@3x.png new file mode 100644 index 0000000..44f0871 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_x.imageset/key_x@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/Contents.json new file mode 100644 index 0000000..bc96386 --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_y@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_y@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@2x.png new file mode 100644 index 0000000..b1911e6 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@3x.png new file mode 100644 index 0000000..eb00f21 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_y.imageset/key_y@3x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/Contents.json b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/Contents.json new file mode 100644 index 0000000..5ced3fe --- /dev/null +++ b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "key_z@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "key_z@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@2x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@2x.png new file mode 100644 index 0000000..87df91f Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@2x.png differ diff --git a/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@3x.png b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@3x.png new file mode 100644 index 0000000..3ce48d6 Binary files /dev/null and b/CustomKeyboard/KeyboardAssets.xcassets/Test/key_z.imageset/key_z@3x.png differ diff --git a/Podfile b/Podfile index f7adfc1..fcee438 100644 --- a/Podfile +++ b/Podfile @@ -21,6 +21,7 @@ target 'keyBoard' do pod 'MJExtension', '3.4.2' pod 'MJRefresh', '3.7.9' pod 'SDWebImage', '5.21.1' + pod 'SSZipArchive', '~> 2.5' end target 'CustomKeyboard' do @@ -33,6 +34,6 @@ target 'CustomKeyboard' do pod 'MBProgressHUD', '1.2.0' pod 'MJExtension', '3.4.2' pod 'DZNEmptyDataSet', '1.8.1' + pod 'SSZipArchive', '~> 2.5' end - diff --git a/Shared/KBConfig.h b/Shared/KBConfig.h index b4db3b4..2c6a97f 100644 --- a/Shared/KBConfig.h +++ b/Shared/KBConfig.h @@ -21,7 +21,7 @@ /// 皮肤图标加载模式: /// 0 = 使用本地 Assets 图片名(key_icons 的 value 写成图片名,例如 "kb_q_melon") -/// 1 = 使用远程 URL 下载到 App Group 目录,再由键盘扩展从文件系统加载 +/// 1 = 使用远程 Zip 皮肤包(skinJSON 中提供 zip_url;key_icons 的 value 写成 Zip 内图标文件名,例如 "key_a") #ifndef KB_SKIN_ICON_USE_REMOTE #define KB_SKIN_ICON_USE_REMOTE 0 #endif diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index d251b87..ab942ce 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 04286A002ECAEF2B00CE730C /* KBMoneyBtn.m in Sources */ = {isa = PBXBuildFile; fileRef = 042869FE2ECAEF2B00CE730C /* KBMoneyBtn.m */; }; 04286A032ECB0A1600CE730C /* KBSexSelVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 04286A022ECB0A1600CE730C /* KBSexSelVC.m */; }; 04286A062ECC81B200CE730C /* KBSkinService.m in Sources */ = {isa = PBXBuildFile; fileRef = 04286A052ECC81B200CE730C /* KBSkinService.m */; }; + 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04286A0A2ECD88B400CE730C /* KeyboardAssets.xcassets */; }; 043FBCD22EAF97630036AFE1 /* KBPermissionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C6EAE12EAF940F0089C901 /* KBPermissionViewController.m */; }; 0459D1B42EBA284C00F2D189 /* KBSkinCenterVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */; }; 0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; }; @@ -237,6 +238,7 @@ 04286A022ECB0A1600CE730C /* KBSexSelVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSexSelVC.m; sourceTree = ""; }; 04286A042ECC81B200CE730C /* KBSkinService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinService.h; sourceTree = ""; }; 04286A052ECC81B200CE730C /* KBSkinService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinService.m; sourceTree = ""; }; + 04286A0A2ECD88B400CE730C /* KeyboardAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = KeyboardAssets.xcassets; sourceTree = ""; }; 0459D1B22EBA284C00F2D189 /* KBSkinCenterVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinCenterVC.h; sourceTree = ""; }; 0459D1B32EBA284C00F2D189 /* KBSkinCenterVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinCenterVC.m; sourceTree = ""; }; 0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = ""; }; @@ -910,6 +912,7 @@ 04C6EAD52EAF870B0089C901 /* KeyboardViewController.h */, 04C6EAD62EAF870B0089C901 /* KeyboardViewController.m */, 04C6EADE2EAF8D680089C901 /* PrefixHeader.pch */, + 04286A0A2ECD88B400CE730C /* KeyboardAssets.xcassets */, ); path = CustomKeyboard; sourceTree = ""; @@ -1476,6 +1479,7 @@ buildActionMask = 2147483647; files = ( 04A9FE202EB893F10020DB6D /* Localizable.strings in Resources */, + 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m b/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m index cf626c0..7a5342f 100644 --- a/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m +++ b/keyBoard/Class/Home/VC/FunctionTest/KBSkinCenterVC.m @@ -53,7 +53,7 @@ // - hidden_keys:需要隐藏文字的按键 identifier // - key_icons: // * 当 KB_SKIN_ICON_USE_REMOTE==0 时,value 写本地 Assets 名称(如 "kb_space_melon") - // * 当 KB_SKIN_ICON_USE_REMOTE==1 时,value 写远程图标 URL(如 "https://.../icons/space.png") + // * 当 KB_SKIN_ICON_USE_REMOTE==1 时,value 写 Zip 包内的图标“短文件名”(如 "key_space";解压后路径为 Skins//icons/key_space.png) self.skins = @[ @{ @"id": @"melon", @@ -74,7 +74,7 @@ @"space" ], // 默认假设本地测试:这里的值写 Assets 名称。 - // 如果开启远程图标模式,可改为实际的图标 URL。 + // 如果开启远程 Zip 模式,可改为 Zip 内对应的图标短文件名(如 "key_space")。 @"key_icons": @{ // 字母键:大小写共用一套本地图(演示用) // 若后续需要不同图,只需改为 *_lower / *_upper 对应不同资源名即可。 diff --git a/keyBoard/Class/Home/VC/FunctionTest/KBTestVC.m b/keyBoard/Class/Home/VC/FunctionTest/KBTestVC.m index 55cc7a6..e231796 100644 --- a/keyBoard/Class/Home/VC/FunctionTest/KBTestVC.m +++ b/keyBoard/Class/Home/VC/FunctionTest/KBTestVC.m @@ -31,7 +31,7 @@ [header addSubview:self.textView]; // 列表 - self.tableView = [[BaseTableView alloc] initWithFrame:CGRectMake(0, 60, KB_SCREEN_WIDTH, KB_SCREEN_HEIGHT - 60) style:UITableViewStyleInsetGrouped]; + self.tableView = [[BaseTableView alloc] initWithFrame:CGRectMake(0, KB_NAV_TOTAL_HEIGHT, KB_SCREEN_WIDTH, KB_SCREEN_HEIGHT - KB_NAV_TOTAL_HEIGHT) style:UITableViewStyleInsetGrouped]; self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.tableView.delegate = self; self.tableView.dataSource = self; diff --git a/keyBoard/Class/Manager/KBSkinService.m b/keyBoard/Class/Manager/KBSkinService.m index ae38128..01ee4e7 100644 --- a/keyBoard/Class/Manager/KBSkinService.m +++ b/keyBoard/Class/Manager/KBSkinService.m @@ -11,8 +11,63 @@ #import "KBNetworkManager.h" #import "KBHUD.h" +#if __has_include() +#import +#endif + @implementation KBSkinService +#pragma mark - Icon short-name mapping (local default) + +/// 本地维护的一份“逻辑按键标识 -> 图标短文件名”映射表。 +/// - 若后端 skinJSON 未提供 key_icons,则远程 Zip 模式会回退使用本表;仅依赖 zip_url + 命名规范即可。 ++ (NSDictionary *)kb_defaultIconShortNames { + static NSDictionary *map; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + map = @{ + // 字母键(大小写共用) + @"letter_q_lower": @"key_q", @"letter_q_upper": @"key_q", + @"letter_w_lower": @"key_w", @"letter_w_upper": @"key_w", + @"letter_e_lower": @"key_e", @"letter_e_upper": @"key_e", + @"letter_r_lower": @"key_r", @"letter_r_upper": @"key_r", + @"letter_t_lower": @"key_t", @"letter_t_upper": @"key_t", + @"letter_y_lower": @"key_y", @"letter_y_upper": @"key_y", + @"letter_u_lower": @"key_u", @"letter_u_upper": @"key_u", + @"letter_i_lower": @"key_i", @"letter_i_upper": @"key_i", + @"letter_o_lower": @"key_o", @"letter_o_upper": @"key_o", + @"letter_p_lower": @"key_p", @"letter_p_upper": @"key_p", + + @"letter_a_lower": @"key_a", @"letter_a_upper": @"key_a", + @"letter_s_lower": @"key_s", @"letter_s_upper": @"key_s", + @"letter_d_lower": @"key_d", @"letter_d_upper": @"key_d", + @"letter_f_lower": @"key_f", @"letter_f_upper": @"key_f", + @"letter_g_lower": @"key_g", @"letter_g_upper": @"key_g", + @"letter_h_lower": @"key_h", @"letter_h_upper": @"key_h", + @"letter_j_lower": @"key_j", @"letter_j_upper": @"key_j", + @"letter_k_lower": @"key_k", @"letter_k_upper": @"key_k", + @"letter_l_lower": @"key_l", @"letter_l_upper": @"key_l", + + @"letter_z_lower": @"key_z", @"letter_z_upper": @"key_z", + @"letter_x_lower": @"key_x", @"letter_x_upper": @"key_x", + @"letter_c_lower": @"key_c", @"letter_c_upper": @"key_c", + @"letter_v_lower": @"key_v", @"letter_v_upper": @"key_v", + @"letter_b_lower": @"key_b", @"letter_b_upper": @"key_b", + @"letter_n_lower": @"key_n", @"letter_n_upper": @"key_n", + @"letter_m_lower": @"key_m", @"letter_m_upper": @"key_m", + + // 功能键 + @"space": @"key_space", // 空格键 + @"backspace": @"key_del", // 删除键 + @"shift": @"key_up", // Shift(上箭头) + @"mode_123": @"key_123", // 字母面板左下角 "123" + @"ai": @"key_ai", // 自定义 AI 键 + @"return": @"key_send" // 发送/换行键 + }; + }); + return map; +} + + (instancetype)shared { static KBSkinService *s; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ s = [KBSkinService new]; }); @@ -154,84 +209,130 @@ }]; } -/// 远程模式:key_icons 的 value 为 URL,需要下载到 App Group,写入主题后再应用。 +/// 远程 Zip 模式:skinJSON 提供 zip_url,一套皮肤一个压缩包。 +/// - Zip 解压路径:AppGroup/Skins//... +/// * 图标:icons/.png,例如 icons/key_a.png +/// * 背景:background.png(可选) +/// - skinJSON.key_icons 的 value 填写 Zip 内的图标“短文件名”(不含路径,可不含扩展名),例如 "key_a" +/// 应用时会被转换为相对 App Group 根目录的路径:Skins//icons/.png - (void)kb_applySkinUsingRemoteIcons:(NSDictionary *)skin completion:(KBSkinApplyCompletion)completion { NSString *skinId = skin[@"id"] ?: @"remote"; NSString *name = skin[@"name"] ?: skinId; - NSString *bgURL = skin[@"background_image"] ?: @""; - NSDictionary *iconURLs = [skin[@"key_icons"] isKindOfClass:NSDictionary.class] ? skin[@"key_icons"] : @{}; + NSString *zipURL = skin[@"zip_url"] ?: @""; // 新协议:远程 Zip 包地址 + + // key_icons 可选: + // - 若后端提供 key_icons,则优先使用服务端映射; + // - 若未提供,则回退到本地默认映射(kb_defaultIconShortNames),这样后端只需返回 id/name/zip_url。 + NSDictionary *iconShortNames = nil; + if ([skin[@"key_icons"] isKindOfClass:NSDictionary.class]) { + iconShortNames = skin[@"key_icons"]; + } else { + iconShortNames = [self.class kb_defaultIconShortNames]; + } + + NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; + if (!containerURL) { + if (completion) completion(NO); + [KBHUD showInfo:KBLocalized(@"无法访问共享容器,应用皮肤失败")]; + return; + } + + NSString *skinsRoot = [containerURL.path stringByAppendingPathComponent:@"Skins"]; + NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId]; + NSString *iconsDir = [skinRoot stringByAppendingPathComponent:@"icons"]; + [[NSFileManager defaultManager] createDirectoryAtPath:iconsDir + withIntermediateDirectories:YES + attributes:nil + error:NULL]; + + NSFileManager *fm = [NSFileManager defaultManager]; + BOOL isDir = NO; + BOOL hasIconsDir = [fm fileExistsAtPath:iconsDir isDirectory:&isDir] && isDir; + NSArray *contents = hasIconsDir ? [fm contentsOfDirectoryAtPath:iconsDir error:NULL] : nil; + BOOL hasCachedAssets = (contents.count > 0); + + NSString *bgPath = [skinRoot stringByAppendingPathComponent:@"background.png"]; dispatch_group_t group = dispatch_group_create(); - __block NSData *bgData = nil; - __block NSMutableDictionary *iconPathMap = [NSMutableDictionary dictionary]; + __block BOOL zipOK = YES; - // 背景图 - if (bgURL.length > 0) { +#if __has_include() + // 若本地尚未缓存该皮肤资源且提供了 zip_url,则下载并解压 Zip 包。 + if (!hasCachedAssets && zipURL.length > 0) { dispatch_group_enter(group); - [[KBNetworkManager shared] GET:bgURL parameters:nil headers:nil completion:^(id jsonOrData, NSURLResponse *response, NSError *error) { + [[KBNetworkManager shared] GET:zipURL parameters:nil headers:nil completion:^(id jsonOrData, NSURLResponse *response, NSError *error) { NSData *data = ([jsonOrData isKindOfClass:NSData.class] ? (NSData *)jsonOrData : nil); - if (data.length > 0) { - UIImage *img = [UIImage imageWithData:data]; - if (img) { - CGFloat maxW = 1500.0; - if (img.size.width > maxW) { - CGFloat scale = maxW / img.size.width; - CGSize newSize = CGSizeMake(maxW, floor(img.size.height * scale)); - UIGraphicsBeginImageContextWithOptions(newSize, YES, 1.0); - [img drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; - UIImage *resized = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - img = resized ?: img; - } - data = UIImageJPEGRepresentation(img, 0.85) ?: data; - } + if (error || data.length == 0) { + zipOK = NO; + dispatch_group_leave(group); + return; + } + + // 将 Zip 写入临时路径再解压 + [[NSFileManager defaultManager] createDirectoryAtPath:skinRoot + withIntermediateDirectories:YES + attributes:nil + error:NULL]; + NSString *zipPath = [skinRoot stringByAppendingPathComponent:@"skin.zip"]; + if (![data writeToFile:zipPath atomically:YES]) { + zipOK = NO; + dispatch_group_leave(group); + return; + } + + NSError *unzipError = nil; + BOOL ok = [SSZipArchive unzipFileAtPath:zipPath + toDestination:skinRoot + overwrite:YES + password:nil + error:&unzipError]; + [fm removeItemAtPath:zipPath error:nil]; + if (!ok || unzipError) { + zipOK = NO; } - bgData = data; dispatch_group_leave(group); }]; } - - // 图标下载到 App Group:Skins//icons/.png - [iconURLs enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, NSString *urlString, BOOL *stop) { - if (![urlString isKindOfClass:NSString.class] || urlString.length == 0) return; - dispatch_group_enter(group); - [[KBNetworkManager shared] GET:urlString parameters:nil headers:nil completion:^(id jsonOrData, NSURLResponse *response, NSError *error) { - NSData *data = ([jsonOrData isKindOfClass:NSData.class] ? (NSData *)jsonOrData : nil); - if (data.length > 0) { - NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; - if (containerURL) { - NSString *skinsRoot = [containerURL.path stringByAppendingPathComponent:@"Skins"]; - NSString *skinRoot = [skinsRoot stringByAppendingPathComponent:skinId]; - NSString *iconsDir = [skinRoot stringByAppendingPathComponent:@"icons"]; - [[NSFileManager defaultManager] createDirectoryAtPath:iconsDir - withIntermediateDirectories:YES - attributes:nil - error:NULL]; - NSString *fileName = [NSString stringWithFormat:@"%@.png", identifier]; - NSString *fullPath = [iconsDir stringByAppendingPathComponent:fileName]; - if ([data writeToFile:fullPath atomically:YES]) { - NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@", skinId, fileName]; - iconPathMap[identifier] = relative; - } - } - } - dispatch_group_leave(group); - }]; - }]; +#else + zipOK = NO; +#endif dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + // 构造 key_icons -> App Group 相对路径 映射 + NSMutableDictionary *iconPathMap = [NSMutableDictionary dictionary]; + [iconShortNames enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, NSString *shortName, BOOL *stop) { + if (![shortName isKindOfClass:NSString.class] || shortName.length == 0) return; + NSString *fileName = shortName; + // 若未带扩展名,默认按 .png 处理 + if (fileName.pathExtension.length == 0) { + fileName = [fileName stringByAppendingPathExtension:@"png"]; + } + NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@", skinId, fileName]; + iconPathMap[identifier] = relative; + }]; + NSMutableDictionary *themeJSON = [skin mutableCopy]; - themeJSON[@"key_icons"] = iconPathMap.copy; // value 改为 App Group 相对路径 + themeJSON[@"id"] = skinId; + if (iconPathMap.count > 0) { + themeJSON[@"key_icons"] = iconPathMap.copy; + } BOOL themeOK = [[KBSkinManager shared] applyThemeFromJSON:themeJSON]; + + // 背景图优先从 Zip 解压出的 background.png 读取 + NSData *bgData = [NSData dataWithContentsOfFile:bgPath]; BOOL ok = themeOK; if (bgData.length > 0) { ok = [[KBSkinManager shared] applyImageSkinWithData:bgData skinId:skinId name:name]; } + + if (!zipOK && !hasCachedAssets) { + ok = NO; + } + if (completion) completion(ok); [KBHUD showInfo:(ok ? KBLocalized(@"已应用,切到键盘查看") : KBLocalized(@"应用皮肤失败"))]; }); } @end -