ابزار سایت

راهنمای_ساخت_و_سفارشی_سازی_نسخه_آی_اواس_تلفن_همراه

فصل 2- ساخت و سفارشی‌سازی نسخه اندروید تلفن همراه

2-1- مقدمه

موتوشاب به عنوان بستری برای تولید شبکه‌های اجتماعی است. لذا نسخه تلفن همراه موتوشاب نیز باید بستری برای متولیان ایجاد کند تا بتوانند نسخه تلفن همراه شبکه اجتماعی خود را ایجاد کنند. به همین منظور تمامی اقداماتی که لازم است تا نسخه تلفن همراه شبکه اجتماعی تولید شده توسط موتوشاب ایجاد شود، انجام شده است.

2-2- راهنمای ساخت و سفارشی‌سازی برنامه

تمامی کدهای ایجاد شده و ارائه شده به کاربران به نحوی طراحی شده است که تا متولیان با کمترین تغییرات در کد بتوانند نسخه تلفن همراه شبکه اجتماعی خود را ایجاد کنند. به همین منظور فایلی تحت عنوان «config.json» ایجاد شده است و تمامی تنظیمات مورد نیاز را شامل شده است. جدول 1 نشان دهنده محتویات درون این فایل است.

نام متغیر مقدار پیش‌فرض شرح نیازمند تغییر توسط متولیان
home_url http://demo.shub.ir/ نشانی اینترنتی شبکه اجتماعی بله
information_url mobile/service/information نشانی کنترل‌کننده درخواست‌ها خیر
sign_in_url sign-in نشانی ورود خیر
sign_out_url sign-out نشانی خروج خیر
join_url join نشانی عضویت خیر
persian_font IRANSansMobile نام فونت خیر
using_mobile_cookie_label UsingMobileApp=android نشان‌دهنده استفاده‌کننده از برنامه آی‌اواس خیر
user_agent_description Mozilla/5.0 (Linux; 7.0; Android SDK built Chrome/51.0.2704.91 Mobile Safari/537.36 توضیحات مرورگر خیر
show_desktop_version false نمایش نسخه رومیزی در صورت نیاز
Is_rtl 1 راست‌چین بودن به صورت پیش‌فرض در صورت نیاز
Embed_url_support Apparat.com/video/video/embed, youtube.com/embed نشانی‌های معتبر برای استفاده در افزونه ویدیو در صورت نیاز
جدول 1: متغیرهای درون فایل تنظیمات پروژه اندروید

همان طور که در جدول 1 قابل مشاهده است، تعداد متغیرهای مورد نیاز برای تغییر توسط متولیان کم بوده و باعث تولید سریع‌تر نسخه تلفن همراه توسط آن‌ها شده است.

متولیان علاوه بر تغییراتی که باید در فایل «config.json» بدهند باید اقدامات زیر را نیز انجام دهند:

  1. ایجاد بستر اعلان
  2. تغییر نشان شبکه اجتماعی
  3. تغییرات مورد نظر در فایل ترجمه

شرح تغییرات هر یک از موارد بالا در جدول 2 آمده است.

عنوان تغییر شرح
ایجاد بستر اعلان وارد پوشه اصلی پروژه شده و فایل google-services.json تولید شده توسط FCM را در آن پوشه قرار دهید.
تغییر نشان (logo) وارد پوشه Assets.xcassets شده و نشان‌های با عناوین «AppIcon.appiconset» و «logo.imageset» را برابر نشان مورد نظر خود قرار دهید.
تغییرات نوشته‌های درون ترجمه وارد پوشه en.lproj و fa-IR.lproj و فایل Localizable.strings شده و متن مورد نیاز خود را شناسایی و تغییر دهید.
تغییرات رنگ‌ها از طریق پروژه، وارد فایل Main.storyboard شده و رنگ المان مورد نظر خود را تغییر دهید.
جدول 2: شرح تغییرات منابع

2-2-1- ایجاد بستر اعلان

به منظور استفاده از بستر اعلان به تلفن همراه، از سامانه FCM که توسط شرکت گوگل ایجاد شده، استفاده شده است. برای استفاده از این سامانه، باید ابتدا وارد وب‌گاه FCM بخش کنسول (https://console.firebase.google.com/) شد. شکل 1 نشان دهنده بخش کنسول از سامانه FCM است.

شکل 1: بخش کنسول از سامانه FCM

به منظور استفاده از این سامانه، باید پروژه جدیدی تولید شده و مشخصات پروژه اندروید را در آن وارد کرد. در هنگام تولید پروژه باید متغیر «package name» دقیقا برابر متغیر «package identifier» پروژه اندروید باشد. بعد از ایجاد پروژه، درون بخش تنظیمات، دکمه‌ای وجود دارد که امکان دریافت فایل google-services.json را به کاربران می‌دهد. شکل 2 نشان دهنده بخش تنظیمات از پروژه تولید شده در FCM را نشان می‌دهد.

شکل 2: تنظیمات پروژه FCM

به منظور تکمیل فرایند، باید کد ارسال اعلان نیز از پروژه ایجاد شده در سامانه FCM وارد موتوشاب شود. به همین منظور وارد بخش «Cloud Messaging» شده و مقدار متغیر «Server key» باید وارد متغیر «کلید پروژه FCM برای ارسال اعلان» درون بخش تنظیمات افزونه «پشتیبانی از نرم‌افزار تلفن همراه» شود. شکل 3 بخش تنظیمات افزونه «پشتیبانی از نرم‌افزار تلفن همراه» را نشان می‌دهد.

شکل 3: بخش تنظیمات افزونه پشتیبانی از نرم‌افزار تلفن همراه

2-2-2- نحوه ایجاد فایل IPA

  1. استفاده از نرم‌افزار محیط توسعه یکپارچه: به منظور تولید فایل ipa برنامه تلفن همراه، ابتدا باید پروژه با نرم‌افزار محیط توسعه یکپارچه باز شود. برای این کار می‌توان از نرم‌افزار XCode که فقط در سیستم عامل Mac قابل استفاده است، استفاده کرد.
  2. اعمال تغییرات مورد نیاز: با توجه به توضیحات گفته شده و مستندات فنی ارائه شده در بخش بعدی، تغییرات مورد نیاز باید در فایل‌ها اعمال شوند.
  3. تولید فایل IPA: از طریق منو در قسمت بالا نرم‌افزار XCode و با ورود به منوی product، زیرمنو Archive انتخاب شود.

2-2-3- کلاس HomeViewController

این کلاس به عنوان اصلی‌ترین موجودیت، وظیفه مدیریت تمامی مولفه‌ها را بر عهده دارد. تمامی توابع درون این کلاس در جدول 3 به همراه شرح آمده است.

نام تابع شرح
rightMenuButtonTapped این تابع به صورت خودکار در زمانی‌که منوی سمت راست انتخاب شود، صدا زده می‌شود. در مواقعی که زبان محلی چپ‌چین است، این منو وظیفه بازگشت به صفحه قبلی را دارد.
leftMenuButtonTapped این تابع به صورت خودکار در زمانی‌که منوی سمت چپ انتخاب شود، صدا زده می‌شود. در مواقعی که زبان محلی راست‌چین است، این منو وظیفه بازگشت به صفحه قبلی را دارد.
viewDidLoad این تابع زمانی‌که این کلاس به صورت کامل بارگیری شد، به صورت خودکار صدا زده می‌شود.
initConfig این تابع وظیفه راه‌اندازی مقادیر اولیه کلاس Config است.
initLoadingIndicator این تابع وظیفه راه‌اندازی مقادیر اولیه نمایش‌گر پیش‌بارگذار را برعهده دارد.
initWebView این تابع وظیفه راه‌اندازی مقادیر اولیه نمایش‌گر وب را برعهده دارد.
initProfileMenu این تابع وظیفه راه‌اندازی مقادیر اولیه نمایش‌گر منوی کاربری را برعهده دارد.
imageProfileMenuTapped این تابع با کلیک کاربر بر روی تصویر منوی کاربری صدا زده می‌شود.
showLoadingIndicator این تابع وظیفه نمایش مولفه نمایش‌گر پیش‌بارگذار را برعهده دارد.
hideLoadingIndocator این تابع وظیفه حذف مولفه نمایش‌گر پیش‌بارگذار را برعهده دارد.
loadingTimerCallback این تابع به صورت بازه‌ای و خودکار به منظور نمایش پیشرفت در بارگیری صفحه صدا زده می‌شود.
webViewDidStartLoad این تابع در زمان شروع بارگیری صفحه به صورت خودکار صدا زده می‌شود.
shouldStartLoadWith این تابع وظیفه مدیریت نشانی‌های اینترنتی است. تمامی نشانی‌های اینترنتی هدایت شده در مولفه نمایش‌گر وب، قبل از اجرا از این تابع عبور خواهند کرد.
webViewDidFinishLoad این تابع به صورت خودکار در زمان اتمام بارگیری صفحات صدا زده می‌شود.
didFailLoadWithError زبان HTML با عنوان «error.html» به کاربر نمایش داده می‌شود.
getLastWebviewUrl این تابع وظیفه برگرداندن آخرین نشانی اینترنتی بارگیری شده معتبر را برعهده دارد.
reload این تابع وظیفه بارگیری مجدد صفحه فعلی کاربر را برعهده دارد.
loadUrl ورودی از نوع رشته را به عنوان ورودی دریافت کرده و موجودیت URL را به منظور بارگیری صفحه ایجاد کرده و به تایع loadUrlWithUrl می‌دهد.
loadUrlWithUrl این تابع وظیفه بارگیری صفحه را توسط نشانی اینترنتی درون ورودی خود برعهده دارد.
checkInternetConnection این تابع وظیفه شناسایی وجود اینترنت در برنامه تلفن همراه را برعهده دارد.
getCurrentLanguageTag این تابع وظیفه برگرداندن زبان محلی فعلی برنامه را برعهده دارد.
showToast این تابع وظیفه نمایش اعلان درون برنامه‌ای برعهده دارد.
updateInformation این تابع وظیفه مدیریت اطلاعات دریافتی از وب‌سرویس را برعهده دارد.
initRefreshController این تابع وظیفه راه‌اندازی مقادیر اولیه مولفه بارگیری مجدد را برعهده دارد.
scrollViewWillEndDragging این تابع به صورت خودکار پس از اتمام اسکرول شدن صفحه صدا زده شده و در صورتی‌که از میزانی بیشتر باشد، صفحه مجددا بارگیری می‌شود.
manageInformation این تابع وظیفه مدیریت اقدامات پس از دریافت اطلاعات از وب‌سرویس را برعهده دارد.
reloadSideBarControllerUsingLanguage این تابع وظیفه مدیریت منوهای سمت راست و چپ برنامه را پس از دریافت اطلاعات از وب‌سرویس برعهده دارد.
goBack این تابع توسط مولفه نمایش‌گر وب، کاربر را به صفحه قبلی هدایت می‌کند.
جدول 3: شرح توابع درون کلاس HomeViewController

2-2-4- کلاس UTIL

این کلاس به عنوان یک کلاس کمکی برای استفاده در کلاس‌های دیگر بوجود آمده است. توابع درون این کلاس درجدول 4 به همراه شرح آمده است.

نام تابع شرح
getMenuItems این تابع وظیفه برگرداندن آرایه‌ای از منوهای دریافت شده توسط مولفه وب‌سرویس را برعهده دارد.
setCookie این تابع وظیفه اضافه کردن مقادیر به مولفه کوکی را برعهده دارد.
selectMenuItem این تابع در زمانی‌که یکی از موارد درون منو انتخاب شود، به صورت خودکار صدا زده می‌شود.
getCellInformationOfMenu این تابع وظیفه برگرداندن اطلاعات مورد نیاز جهت نمایش هر مورد از منو را برعهده دارد.
imageLoginTapped این تابع با کلیک کاربر بر روی تصویر ورود (خروج) صدا زده شده و کاربران مهمان را به صفحه ورود (کاربران ورود یافته را به صفحه خروج) هدایت می‌کند.
imageRegisterTapped این تابع با کلیک کاربر مهمان بر روی تصویر ثبت‌نام صدا زده شده و کاربران مهمان را به صفحه ثبت‌نام هدایت می‌کند.
imageProfileTapped این تابع با کلیک کاربر بر روی تصویر نمایه صدا زده شده و کاربران ورود یافته را به صفحه نمایه و کاربر مهمان را به صفحه ورود هدایت می‌کند.
initMenuResources این تابع وظیفه راه‌اندازی اولیه مقادیر تصاویر ثبت‌نام، تصویر نمایه و ورود به سامانه را برعهده دارد.
isInBlackListMenuItems این تابع وظیفه نمایش مولفه نمایش‌گر پیش‌بارگذار را برعهده دارد.
setNavigationFontFamily این تابع وظیفه تغییر فونت را برعهده دارد.
getInitialHost این تابع وظیفه جداسازی حروف www. از نشانی اینترنتی وارد شده در فایل با عنوان «config.json» را برعهده دارد.
isDownloadableUrl این تابع وظیفه شناسایی موارد قابل دریافت در هنگام بارگیری مولفه نمایش‌گر وب را برعهده دارد. برای مثال اگر کاربری قصد دریافت فایل از طریق برنامه تلفن همراه را داشته باشد، این تابع در صورت مجاز دانستن دریافت آن فایل، امکان دریافت برای کاربر را فراهم می‌کند.
جدول 4: شرح توابع درون کلاس UTIL

2-2-5- کلاس User

این کلاس به عنوان موجودیت کاربر ایجاد شده و شامل اطلاعات زیر از این موجودیت است:

  1. نام
  2. رایانامه
  3. نشانی اینترنتی تصویر نمایه
  4. نشانی اینترنتی صفحه نمایه کاربر

در صورتی‌که کاربر به عنوان مهمان در سامانه شناسایی شود، تمامی اطلاعات بالا به صورت خالی در این موجودیت قرار می‌گیرند.

2-2-6- کلاس MyMenuItem

این کلاس به عنوان موجودیت موارد درون فهرست ایجاد شده است و شامل اطلاعات زیر است:

  1. عنوان
  2. نشانی اینترنتی
  3. برچسب
  4. مورد فعلی
  5. شناسه زبان
  6. وجود یا عدم وجود راست‌چین

موارد 3 تا 6 تنها برای موارد درون بخش زبان به کار برده شده و برای موارد دیگر درون فهرست به صورت خالی در نظر گرفته می‌شوند.

2-2-7- کلاس Information

این کلاس به عنوان موجودیت اطلاعات دریافتی از طریق وب‌سرویس ایجاد شده است و شامل اطلاعات زیر است:

  1. آرایه‌ای از موجودیت موارد درون فهرست برای بخش فهرست اصلی
  2. آرایه‌ای از موجودیت موارد درون فهرست برای بخش فهرست زیرین
  3. آرایه‌ای از موجودیت موارد درون فهرست برای بخش فهرست زبان‌ها
  4. موجودیت کاربر

اطلاعات درون این کلاس در زمان دریافت اطلاعات از طریق وب‌سرویس ایجاد می‌شود.

2-2-8- کلاس Reachability

این کلاس به منظور شناسایی وجود بستر اینترنت در تلفن همراه کاربر بوجود آمده است. توابع درون این کلاس در جدول 5 شرح داده شده است.

نام تابع شرح
isInternetAvailable این تابع وظیفه شناسایی وجود اینترنت در برنامه تلفن همراه را برعهده دارد.
جدول 5: شرح توابع درون کلاس Reachability

2-2-9- کلاس StringExtension

این کلاس به منظور استفاده از چندزبانی در برنامه تلفن همراه بوجود آمده است. توابع درون این کلاس در جدول 6 شرح داده شده است.

نام تابع شرح
localized این تابع به منظور برگرداندن ترجمه نوشته داده شده به عنوان ورودی در قالب زبان فعلی را برعهده دارد.
جدول 6: شرح توابع درون کلاس StringExtension

2-2-10- کلاس shub-Bridging-Header

این کلاس به منظور برقرای ارتباط فایل‌های با زبان swift در نسخه 3 و فایل‌های با زبان objective-c بوجود آمده است. درون این کلاس فایل‌های .h کتابخانه‌های مورد نیاز، وارد می‌شوند.

2-2-11- کلاس NavigationHelper

این کلاس به عنوان کلاس کمکی برای شناسایی نشانی‌های اینترنتی درونی و بیرونی ایجاد شده است. توابع درون این کلاس در جدول 7 شرح داده شده است.

نام تابع شرح
isInternalUri این تابع وظیفه شناسایی درونی یا بیرونی بودن نشانی اینترنتی داده شده به عنوان ورودی را برعهده دارد.
checkUrlForOverriding این تابع مشخص کننده باز کردن نشانی اینترنتی توسط برنامه تلفن همراه یا توسط برنامه خارجی است.
isInEmbedUrlSupport این تابع مشخص کننده وجود نشانی اینترنتی در حال بارگیری، جزو نشانی‌های اینترنتی مجاز قابل استفاده در iframe است.
جدول 7: شرح توابع درون کلاس NavigationHelper

2-2-12- کلاس InformationReceiver

این کلاس برای اجرای فرایند دریافت اطلاعات از طریق وب‌سرویس را برعهده دارد. توابع درون این کلاس در جدول 8 شرح داده شده است.

نام تابع شرح
getInformation این تابع وظیفه اتصال به و دریافت اطلاعات از وب‌سرویس به صورت آسنکرون را برعهده دارد.
جدول 8: شرح توابع درون کلاس InformationReceiver

2-2-13- کلاس RightMenuController

این کلاس وظیفه راه‌اندازی اولیه موللفه کلاس‌های LeftMenuController و RightMenuController را برعهده دارد. توسط این کلاس که به عنوان اولین کلاس در بین دیگر کلاس‌ها بارگیری می‌شود، امکان باز شدن منو به صورت بومی نیز فراهم می‌شود.

2-2-14- کلاس NavigationHelper

این کلاس وظیفه مدیریت منوی سمت راست برنامه را برعهده دارد. توابع استفاده شده در این کلاس در جدول 9 شرح داده شده است.

نام تابع شرح
viewDidLoad این تابع در زمان اتمام بارگیری این کلاس به صورت خودکار صدا زده می‌شود.
imageLoginTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر ورود به سامانه صدا زده می‌شود.
imageRegisterTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر ثبت‌نام صدا زده می‌شود.
imageProfileTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر نمایه کاربر صدا زده می‌شود.
numberOfRowsInSection این تابع تعداد موارد درون منو را نشان می‌دهد.
cellForRowAt این تابع وظیفه نمایش هر مورد از منو را برعهده دارد.
didSelectRowAt این تابع به صورت خودکار در زمان کلیک بر روی هر مورد از منو صدا زده می‌شود.
جدول 9: شرح توابع درون کلاس RightMenuController

2-2-15- کلاس LeftMenuController

این کلاس وظیفه مدیریت منوی سمت چپ برنامه را برعهده دارد. توابع استفاده شده در این کلاس در جدول 10 شرح داده شده است.

نام تابع شرح
viewDidLoad این تابع در زمان اتمام بارگیری این کلاس به صورت خودکار صدا زده می‌شود.
imageLoginTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر ورود به سامانه صدا زده می‌شود.
imageRegisterTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر ثبت‌نام صدا زده می‌شود.
imageProfileTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر ثبت‌نام صدا زده می‌شود.
imageProfileTapped این تابع به صورت خودکار در زمان کلیک بر روی تصویر نمایه کاربر صدا زده می‌شود.
numberOfRowsInSection این تابع تعداد موارد درون منو را نشان می‌دهد.
cellForRowAt این تابع وظیفه نمایش هر مورد از منو را برعهده دارد.
didSelectRowAt این تابع به صورت خودکار در زمان کلیک بر روی هر مورد از منو صدا زده می‌شود.
جدول 10: شرح توابع درون کلاس LeftMenuController

2-3- تنظیمات پروژه

تنظیمات پروژه به سه بخش تقسیم می‌شود. بخش اول شامل شامل تنظیمات کلی پروژه است. بخش دوم شامل تنظیمات برنامه تولید شده در پروژه بوده و بخش سوم شامل تنظیماتی است که نحوه عملکرد برنامه را تغییر می‌دهد. تمامی مقادیر در جدول 11 شرح داده شده است.

نام متغیر مقدار شرح مکان تنظیمات
Bundle Identifier ir.iiscenter.shub این مقدار مشخص کننده شناسه پروژه است. Target
Build 1 این مقدار مشخص کننده نسخه ساخت برنامه است. Target
Version 1.0 این مقدار مشخص کننده نسخه برنامه است. Target
Signing خالی در صورتی‌که قصد ارائه برنامه تلفن همراه را در Apple Store دارید، می‌بایست این مقدار به درستی قرار بگیرد. Target
Deployment Target 9.0 این مقدار مشخص کننده کمینه نسخه قابل پشتیبانی برنامه تلفن همراه است. Target
Device Orientation Portrait این مقدار مشخص کننده مقادیر ممکن برای rotate شدن تلفن همراه است. Target
Localization English و Persian این مقدار مشخص کننده زبان‌های قابل استفاده در برنامه تلفن همراه را نشان می‌دهد. Project
Use Base Internationalization True این مقدار مشخص کننده استفاده از چند زبانی در برنامه تلفن همراه را نشان می‌دهد. Project
App Transport Security Settings Allow Arbitary Loads: Yes این مقدار به منظور استفاده از پروتکل http و https نامعتبر در زمان بارگیری صفحات ایجاد شده است. Info.plist
Supported interface orientation Portrait (bottom home button) این مقدار مشخص کننده مقادیر ممکن برای rotate شدن تلفن همراه است. Info.plist
Supported interface orientation (ipad) Apparat.com/video/video/embed, youtube.com/embed این مقدار مشخص کننده مقادیر ممکن برای rotate شدن تلفن همراه (آیپد) است. Info.plist
جدول 11: شرح توابع درون کلاس LeftMenuController

2-3- نحوه انتشار برنامه iOS در بازار App Store

پیش‌نیازهای انتشار برنامه iOS:

1- رایانامه شامل سیستم عامل Macintosh

2- استفاده از یک vpn به منظور جلوگیری از تحریم‌ها

3- وجود حساب کاربری apple دارای حالت دولوپر

4- نرم‌افزار XCode

نکته: حتما باید تمامی فرایند زیر از طریق vpn استفاده شود. در صورتی‌که از openVPN استفاده می‌شود، می‌توان از نرم‌افزارهای tunnle blick و proxyfier 2 به منظور tunnel شدن شبکه استفاده کرد.

مرحله 1: وارد آدرس itunesconnect.apple.com شده و نام کاربری و رمز عبور خود را وارد نمایید.

مرحله 2: پس از ورود به پیوند مذکور، وارد بخش My Apps شوید. در این بخش پروژه‌های قبلی خود را مشاهده کرده و یا می‌توان یک پروژه جدید ساخت.

مرحله 3: در این مرحله شما باید اطلاعات پروژه را تکمیل کرده و فایل مورد نیاز جهت انتشار را انتخاب کنید. در این مرحله می‌بایست، تعدادی تصویر برای آیپد و آیفون از پروژه فراهم کرده و در اطلاعات پروژه استفاده نمایید.

نحوه ایجاد فایل برنامه جهت انتشار:

مرحله 1: وارد نرم‌افزار Xcode شوید.

مرحله 2: تصاویر برنامه تلفن همراه خود، به همراه پیوند دسترسی به میزبان خود و رنگ برنامه را می‌بایست تنظیم کنید.

مرحله 3: در این مرحله می‌بایست وارد نشانی اینترنتی developer.apple.com شده و یک Profiler در حساب کاربری خود ایجاد کنید. به منظور ایجاد Profiler می‌بایست یک کلید برای پروژه خود (برای مثال ir.iiscenter.shub) انتخاب نمایید.

مرحله 4: در این مرحله می‌بایست می‌بایست نوع تلفن همراه در نرم‌افزار Xcode را بر روی گزینه Generic iOS Device قرار داده و از طریق فهرست، گزینه Archive را انتخاب نمایید. در پنجره باز شده، گزینه Upload را وارد کنید. سپس یک مورد به لیست نسخه‌های ایجاد شده اضافه می‌شود. این مورد به صورت خودکار به فهرست موارد قابل انتخاب برنامه جهت انتشار در itunesconnect.apple.com اضافه می‌شود. این فایل توسط سایت apple.com مورد بررسی قرار گرفته و پس از تایید قایل استفاده خواهد بود.

راهنمای_ساخت_و_سفارشی_سازی_نسخه_آی_اواس_تلفن_همراه.txt · آخرین ویرایش: 2019/01/15 12:45